Есть журнал доступа nginx и журнал ошибок для STDOUT и STDERR основного процесса
есть ли способ иметь журнал главного процесса в STDOUT STDERR вместо файла?
похоже, что вы можете только передать путь к файлу в директиву access_log:
access_log /var/log/nginx/access.log
и то же самое на глобальном уровне:
error_log /var/log/nginx/error.log
Я понимаю, что это просто не может быть особенностью nginx, мне было бы интересно краткое решение, которое использует хвост, например. Предпочтительно, хотя это происходит из главного процесса, хотя потому что я бегу nginx в этом плане.
4 ответов:
Edit: кажется, nginx теперь поддерживает
error_log stderr;как говорится в ответ Анона.вы можете отправить журналы
/dev/stdout. Вnginx.conf:daemon off; error_log /dev/stdout info; http { access_log /dev/stdout; ... }edit: возможно, потребуется запустить ln-sf / proc / self/fd / dev/ если используется запуск определенных контейнеров docker, то используйте
/dev/fd/1или/dev/fd/2
Если вопрос связан с Докером... официальные изображения nginx docker делают это, делая softlinks в сторону stdout / stderr
RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log
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, locationhttp://nginx.org/en/docs/ngx_core_module.html#error_log
не использовать:
/dev/stderrЭто нарушит настройку, если вы собираетесь использовать systemd-nspawn.
при запуске Nginx в контейнере Docker помните, что Том, смонтированный над каталогом журнала, не позволяет создать программную ссылку между файлами журнала и stdout/stderr в вашем файле docker, как описано в @Boeboe ' s ответ.
в этом случае вы можете либо создать softlink в своей точке входа (выполняется после монтирования томов), либо вообще не использовать том (например, когда журналы уже собраны центральной системой ведения журнала).
Comments