2015-02-08 93 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