将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系统收集)。