Имейте nginx access_log и журнал ошибок в STDOUT и STDERR основного процесса
Есть ли способ, чтобы журнал основного процесса в STDOUT STDERR вместо файла?
Кажется, что вы можете передать путь файла только к директиве access_log:
access_log /var/log/nginx/access.log
И то же самое касается error_log:
error_log /var/log/nginx/error.log
Я понимаю, что это просто не может быть особенностью nginx, я бы интересовался кратким решением, которое использует хвост, например. Желательно, однако, что это происходит из мастер-процесса, хотя я запускаю nginx на переднем плане.
Ответы
Ответ 1
Изменить: кажется, что nginx теперь поддерживает error_log stderr;
, как указано в Anon answer.
Вы можете отправить журналы на /dev/stdout
. В nginx.conf
:
daemon off;
error_log /dev/stdout info;
http {
access_log /dev/stdout;
...
}
edit: Может потребоваться запустить ln -sf/proc/self/fd/dev/, если вы используете определенные контейнеры докеров, затем используйте /dev/fd/1
или /dev/fd/2
Ответ 2
Если вопрос связан с докером... официальные изображения докеры nginx делают это, делая softlinks в направлении stdout/stderr
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
REF: https://microbadger.com/images/nginx
Ответ 3
Syntax: error_log file | stderr | syslog:server=address[,parameter=value] | memory:size [debug | info | notice | warn | error | crit | alert | emerg];
Default:
error_log logs/error.log error;
Context: main, http, stream, server, location
http://nginx.org/en/docs/ngx_core_module.html#error_log
Не используйте: /dev/stderr
Это нарушит ваши настройки, если вы собираетесь использовать systemd-nspawn.
Ответ 4
При запуске Nginx в контейнере Docker имейте в виду, что том, смонтированный над журнальным файлом, поражает цель создания softlink между файлами журнала и stdout/stderr в вашем файле Docker, как описано в @Ответ Boeboe.
В этом случае вы можете либо создать программную ссылку в своей точке входа (выполняемую после установки томов), либо вообще не использовать тома (например, когда журналы уже собраны центральной системой ведения журнала).
Ответ 5
В образе докера PHP-FPM я вижу такой подход:
# cat /usr/local/etc/php-fpm.d/docker.conf
[global]
error_log = /proc/self/fd/2
[www]
; if we send this to /proc/self/fd/1, it never appears
access.log = /proc/self/fd/2