Gunicorn: Как распечатать журнал доступа в STDOUT?

Созданный на 19 янв. 2016  ·  22Комментарии  ·  Источник: benoitc/gunicorn

Привет,

http://docs.gunicorn.org/en/stable/settings.html#accesslog говорит мне, что '-' будет выводиться в stderr, но мы предпочитаем STDOUT для целей ведения журнала. Есть ли способ сделать это?

Спасибо!

Documentation FeaturLogging

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

С файлом приложения myapp.py я попробовал следующее.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Я могу подтвердить, что вывод журнала доступа идет на stdout .

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

Соответствующая строка находится здесь: https://github.com/benoitc/gunicorn/blame/master/gunicorn/glogging.py#L335 logging.StreamHandler() по умолчанию sys.stderr . Возможно, мы могли бы изменить accesslog, чтобы он принимал «stdout» и «stderr» как допустимые значения и переходил к logging.StreamHandler() .

Другое, но менее гибкое решение:

Обработчик консоли уже печатает на sys.stdout : https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L64 Мы могли бы установить обработчик на «консоль» за gunicorn.accesslog как мы уже делали для gunicorn.error в https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L55

Я смущен. Разве StreamHandler уже не входит в систему sys.stdout?

Нет, значение по умолчанию sys.stderr : https://github.com/python/cpython/blob/master/Lib/logging/__init__.py#L955

Хорошо, сейчас я понимаю. Изначально мы печатали журналы на стандартный вывод. IMO журнал доступа должен по умолчанию иметь значение STDOUT. Мысли?

@benoitc :+1:

Доступ к журналу на стандартном выходе
Журнал ошибок на stderr

какие-либо обновления по этому запросу?

@benoitc Я не уверен, что этот коммит решает эту проблему. Допустим, я запускаю gunicorn myapp:app без дополнительных аргументов. Ожидается ли, что gunicorn будет регистрировать записи доступа к стандартному выводу? Если да, то ганикорн этого не делает.

В https://github.com/benoitc/gunicorn/blob/master/gunicorn/glogging.py#L302 без каких-либо аргументов командной строки self.cfg.accesslog равно None , и функция возвращается раньше. Насколько я могу судить, похоже, нет способа войти в стандартный вывод без указания --log-config или --log-syslog . Это правильно?

по умолчанию журнал доступа отключен, если вы это имеете в виду?

@benoitc Да. Приведенное выше обсуждение, по-видимому, указывает на то, что журналы доступа будут отправляться на стандартный вывод, а журналы ошибок — на стандартный вывод. Однако похоже, что ведение журнала доступа по умолчанию отключено.

Кстати, с Python 2.7 я мог делать --access-log /dev/stdout --error-log /dev/stderr , и это работало. В Python 3 передача /dev/stdout в качестве аргумента не работает в https://github.com/benoitc/gunicorn/blob/f722a6eb65e51407c420ac3d6be72d03bd773ad0/gunicorn/util.py#L498 .

👍 @suriya Я думаю, что ищу то же поведение, что и вы - я хотел бы запустить --capture-log и включить --access-logfile=<something> , но я бы предпочел, чтобы мои строки журнала доступа выводились на стандартный вывод не стдерр.

РЕДАКТИРОВАТЬ: Чтобы уточнить, это просто проблема с Python3. Используя python3.5.1, передача --access-logfile=/dev/stdout в gunicorn не запускает сервер.

Да, похоже, логирование доступа отключено по умолчанию.

@huoxy Больше, чем по умолчанию, я думаю, что проблема больше в том, что нет простого способа записать журналы доступа в стандартный вывод.

@huoxy ˋ--access-logfile=-` должно помочь. дайте мне знать, если нет.

  • Бенуа
    В среду, 27 июля 2016 г., в 08:49, Сурия Субраманян, [email protected]
    написал:

@huoxy https://github.com/huoxy Больше, чем по умолчанию, я думаю
проблема больше в том, что нет простого способа писать журналы доступа к
стандартный вывод.


Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

также это, вероятно, проблема с документами. но журнал доступа должен быть напечатан на стандартный вывод
когда используется - . в противном случае это ошибка. Дай мне знать...
В среду, 27 июля 2016 г., в 09:03, Бенуа Шено [email protected] написал:

@huoxy ˋ--access-logfile=-` должно помочь. дайте мне знать, если нет.

  • Бенуа
    В среду, 27 июля 2016 г., в 08:49, Сурия Субраманян, [email protected]
    написал:

@huoxy https://github.com/huoxy Больше, чем по умолчанию, я думаю
проблема больше в том, что нет простого способа писать журналы доступа к
стандартный вывод.


Вы получаете это, потому что вас упомянули.
Ответьте на это письмо напрямую, просмотрите его на GitHub
https://github.com/benoitc/gunicorn/issues/1184#issuecomment -235501347,
или заглушить тему
https://github.com/notifications/unsubscribe-auth/AAA4oj67GbLqwaJaCQ9NOH7-iAXJoMxGks5qZv9fgaJpZM4HHW4G
.

@benoitc Как упоминалось в # 1293, gunicorn --access-log - регистрирует доступ к стандартной ошибке. Я пробовал с gunicorn --access-log=- , и в журнале по-прежнему появляется стандартная ошибка.

согласно этому:
https://github.com/gunicorn/gunicorn/blob/master/gunicorn/glogging.py#L58

Регистратор по умолчанию - console , который выводит на стандартный вывод, поэтому я думаю, если вам нужно, чтобы все было на стандартный вывод, как и я, чтобы все попадало в драйвер ведения журнала пушки, вы можете просто оставить эти параметры пустыми.

Кроме того, решение, которое я бы предложил, состоит в том, чтобы создать символическую ссылку для файлов журнала на /dev/stdout или /dev/stderror , если она не работает напрямую:

ln -sf /var/log/gunicorn.access.log  /dev/stdout
ln -sf /var/log/gunicorn.error.log  /dev/stdout

exec newrelic-admin run-program gunicorn --chdir /usr/src/app --name nexchange --bind 0.0.0.0:${GUNICORN_PORT} --workers 3 --log-level=info --log-file=/var/log/gunicorn.error.log --access-logfile=/var/log/gunicorn.access.log nexchange.wsgi:application "$@"

Я только что перешел на gunicorn 19.7.0, выпущенный на прошлой неделе. К сожалению, я до сих пор не могу записать журнал доступа во что-либо, кроме stderr.

Я пробовал запускать gunicorn без параметров, а также со всеми перестановками, включая/не включая "--access-logfile=- --error-logfile=- --log-level=DEBUG".

Я упустил что-то основное в ведении журнала пушки? Возможно, что-то из моей среды или из Django истекает кровью и вызывает эту проблему?

С файлом приложения myapp.py я попробовал следующее.

$ python --version
Python 3.5.2
$ gunicorn --version
gunicorn (version 19.7.0)
$ gunicorn --access-logfile - myapp:app 

Я могу подтвердить, что вывод журнала доступа идет на stdout .

Я на Python 2.7.14. (Как-то пропустил быстрый ответ несколько месяцев назад.)

Вы также можете использовать accesslog = "-" в файле gunicorn.config.py.

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