Nginx 记录到 stderr
Nginx log to stderr
我想将 nginx 访问日志重定向到 stdout
以便能够通过 journalctl
(systemd) 分析它们。
有相同的问题和已批准的答案。
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.
没有访问日志的迹象:(
根据 nginx documentation,error_log
指令支持 stderr
作为其参数。因此,以下配置应将错误消息记录到 stderr:
http {
error_log stderr;
...
}
不幸的是,access_log
不支持 stdout
作为其参数。但是,应该可以将其设置为 syslog
(documentation) 并让 systemd 将系统日志调用包含在其日志中。
server {
error_log syslog:server=unix:/dev/log;
access_log syslog:server=unix:/dev/log;
...
}
默认 journald 配置(我是 运行 Ubuntu 15.04)从 syslog 读取,所以这个配置是让日志可见的全部 journalctl -u nginx
我想将 nginx 访问日志重定向到 stdout
以便能够通过 journalctl
(systemd) 分析它们。
有相同的问题和已批准的答案。
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.
没有访问日志的迹象:(
根据 nginx documentation,error_log
指令支持 stderr
作为其参数。因此,以下配置应将错误消息记录到 stderr:
http {
error_log stderr;
...
}
不幸的是,access_log
不支持 stdout
作为其参数。但是,应该可以将其设置为 syslog
(documentation) 并让 systemd 将系统日志调用包含在其日志中。
server {
error_log syslog:server=unix:/dev/log;
access_log syslog:server=unix:/dev/log;
...
}
默认 journald 配置(我是 运行 Ubuntu 15.04)从 syslog 读取,所以这个配置是让日志可见的全部 journalctl -u nginx