2015-02-08 61 views
11

我想将nginx访问日志重定向到stdout以便能够通过journalctl(systemd)分析它们。Nginx登录到stderr

还有与批准的答案相同的问题。 Have nginx access_log and error_log log to STDOUT and STDERR of master process 但它不适合我。用/dev/stderr我得到open() "/dev/stderr" failed (6: No such device or address)。与/dev/stdout我得到journalctl -u nginx没有访问日志。

nginx.conf

daemon off; 

http { 
    access_log /dev/stdout; 
    error_log /dev/stdout; 
    ... 
} 
... 

sitename.conf

server { 
    server_name sitename.com; 
    root /home/username/sitename.com; 

    location/{ 
     proxy_pass http://localhost:3000/; 
     proxy_set_header Host $host; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     access_log on; 
    } 
} 

nginx.service

[Service] 
Type=forking 
PIDFile=/run/nginx.pid 
StandardOutput=syslog 
StandardError=syslog 
SyslogIdentifier=nginx 
ExecStartPre=/usr/sbin/nginx -t -q -g 'master_process on;' 
ExecStart=/usr/sbin/nginx -g 'master_process on;' 
ExecReload=/usr/sbin/nginx -g 'master_process on;' -s reload 
ExecStop=-/sbin/start-stop-daemon --quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid 
TimeoutStopSec=5 

我已经尽我所能在不断变化的每一个可能的参数变通方法,上面的代码和不同的nginx版本(1.2,1.6),但没有任何成功。

我真的很感兴趣如何使这项工作,所以我在另一个线程上再次提出这个问题,因为我认为以前的答案是错误的,投机的或环境特定的。

$ journalctl -u nginx 

只包含线,如

Feb 08 13:05:23 Username systemd[1]: Started A high performance web server and a reverse proxy server. 

,并没有访问日志:(

回答

5

的迹象按照nginx documentation,该error_log指令支持stderr作为其参数。因此,下面的配置应记录错误消息到stderr:

http { 
    error_log stderr; 
    ... 
} 

不幸的是,access_log不支持stdout作为它的参数。但是,应该可以将其设置为syslogdocumentation)并让systemd将syslog调用包括到其日志中。

11
server { 
    error_log syslog:server=unix:/dev/log; 
    access_log syslog:server=unix:/dev/log; 
    ... 
} 

默认journald配置(我运行Ubuntu 15.04)从系统日志进行读取,因此此配置是所有需要有日志中查看与journalctl -u nginx

+1

标准错误,我没有工作,但这个配置没有。谢谢! – cortopy 2016-03-07 20:48:29