将nginx access_log和error_log日志logging到主进程的STDOUT和STDERR

有没有办法让主进程日志到STDOUT STDERR而不是文件?

看来你只能通过一个文件path到access_log指令:

access_log /var/log/nginx/access.log 

这同样适用于error_log:

 error_log /var/log/nginx/error.log 

我明白,这可能不是nginx的一个特性,例如,我会对使用tail的简明解决scheme感兴趣。 尽pipe它来自主进程,但是由于我在前台运行nginx,所以更可取。

编辑:看来nginx现在支持error_log stderr; 正如Anon的回答中提到的那样。

您可以将日志发送到/dev/stdout 。 在nginx.conf

 daemon off; error_log /dev/stdout info; http { access_log /dev/stdout; ... } 

编辑:如果使用运行某些docker容器,可能需要运行ln -sf / proc / self / fd / dev / ,然后使用/dev/fd/1/dev/fd/2

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。

如果问题是docker相关的…官方nginxdocker图像通过使stlink / stderr软链接

RUN ln -sf /dev/stdout /var/log/nginx/access.log && ln -sf /dev/stderr /var/log/nginx/error.log

REF: https : //microbadger.comhttp://img.dovov.comnginx

在Docker容器中运行Nginx时,请注意,挂载在日志目录上的卷无法在Dockerfile中创build日志文件和stdout / stderr之间的软链接,如@Boeboe的答案中所述 。

在这种情况下,您可以在入口点创build软链接(在装入卷之后执行),也可以根本不使用卷(例如,日志已由中央日志logging系统收集)。