Gunicorn: Записывать сообщения из app.logger Flask

Созданный на 19 июл. 2012  ·  11Комментарии  ·  Источник: benoitc/gunicorn

Сообщения от регистратора Flask, такие как app.logger.info("Это сообщение"), не сохраняются в файлах журнала пушки.

Самый полезный комментарий

Flask по умолчанию не регистрирует сообщения в производственном режиме, потому что он не делает никаких предположений о вашей среде (http://flask.pocoo.org/docs/errorhandling/). Чтобы приложение Flask app.logger регистрировало сообщения через gunicorn, вам нужно добавить обработчик ведения журнала. Например, вот регистратор для stderr пушки:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

Это не проблема с gunicorn и может быть закрыта.

Все 11 Комментарий

Flask по умолчанию не регистрирует сообщения в производственном режиме, потому что он не делает никаких предположений о вашей среде (http://flask.pocoo.org/docs/errorhandling/). Чтобы приложение Flask app.logger регистрировало сообщения через gunicorn, вам нужно добавить обработчик ведения журнала. Например, вот регистратор для stderr пушки:

import logging
import flask

app = flask.Flask(__name__)

@app.before_first_request
def setup_logging():
    if not app.debug:
        # In production mode, add log handler to sys.stderr.
        app.logger.addHandler(logging.StreamHandler())
        app.logger.setLevel(logging.INFO)

Это не проблема с gunicorn и может быть закрыта.

закрыто по запросу. Спасибо!

Автоматически ли gunicorn получает журнал из STDERR?

@benoitc
Как заставить gunicorn выбирать журнал из STDERR?

Флаг -R может быть тем, что вы ищете.

http://gunicorn-docs.readthedocs.org/en/latest/settings.html#enable-stdio-inheritance

-R не сделал это для меня.

Ниже моя установка

@app.route('/')
def index():
    console = logging.StreamHandler()
    log = logging.getLogger("asdasd")
    log.addHandler(console)
    log.setLevel(logging.DEBUG)
    log.error("Something")
    print >> sys.stderr, "Another thing"
    return 'ok'

Вот как я это запускаю

gunicorn --access-logfile - --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level -D debug server:app

Я получаю журналы Gunicorn в /mnt/log/test.log, но ни один из журналов моего приложения.

Хорошо. Я могу неправильно понять, как это работает, если только это не простой вопрос
необходимость сбрасывать stderr вручную (IIRC это потому, что он буферизуется
когда ганикорн разветвится, может быть?)

Но определенно гораздо проще контролировать, куда идут ваши сообщения журнала, если
вы используете регистраторы python вместо stdio.
26 июня 2014 г., 13:39, «Юсуф Фаузан» [email protected] написал:

-R не сделал это для меня.

Ниже моя установка

@app.route('/')
индекс определения():
консоль = ведение журнала.StreamHandler()
журнал = logging.getLogger("asdasd")
log.addHandler(консоль)
log.setLevel(регистрация.DEBUG)
лог.ошибка("Что-то")
print >> sys.stderr, "Еще одно"
вернуть "хорошо"

Вот как я это запускаю

gunicorn --access-logfile --log-file /mnt/log/test.log --bind 0.0.0.0:8080 --workers 2 --worker-class gevent --log-level debug server:app

Я получаю журналы gunicorn в /mnt/log/test.log, но ни одно из моих приложений
журналы.


Ответьте на это письмо напрямую или просмотрите его на GitHub
https://github.com/benoitc/gunicorn/issues/379#issuecomment-47276949 .

Я думаю, что нашел проблему. Вот запись в журнале изменений за 19.00

fix logging: don’t try to redirect stdout/stderr to the logfile.

Я только что попробовал с v18, и журналы из StreamHandler перенаправляются в журналы пушек. Есть идеи, как это исправить?
@benoitc @tilgovi

@spicavigo gunicorn не будет автоматически перенаправлять stderr в файл журнала. Исправление заключалось в удалении хака, как это обсуждалось в #591. Вы пробовали --error-logfile=- , которые отображают журналы на консоли?

Если вы хотите напрямую вернуть ошибку в файл ошибки, вы можете распечатать ее в environ['wsgi.errors'] или зарегистрировать ее: ee08ac86441e36c3433849b79b3839d1425647fd .

Спасибо @benoitc

Теперь я записываюсь в файл вместо stderr. Просто изменение произошло между моим разработчиком, и поэтому оно полностью сбило меня с толку. Я был pip install gunicorn, и внезапно перенаправление stderr перестало работать, и я не понял, что это было из-за изменения версии, а не из-за ошибок в моем коде :)

@benoitc Можно ли как-то записать stderr в файл журнала?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги