Привет,
http://docs.gunicorn.org/en/stable/settings.html#accesslog говорит мне, что '-'
будет выводиться в stderr, но мы предпочитаем STDOUT для целей ведения журнала. Есть ли способ сделать это?
Спасибо!
Соответствующая строка находится здесь: 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=-` должно помочь. дайте мне знать, если нет.
@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.
Самый полезный комментарий
С файлом приложения myapp.py я попробовал следующее.
Я могу подтвердить, что вывод журнала доступа идет на
stdout
.