Nginx 用syslog传输error.log到远程服务器
error_log配置syslog远程传输
error_log syslog:server=127.0.0.1:514,facility=local0,severity=info,tag=nginx error;
其中server指定传输的IP&Port。为了开发方便,这里设置了本机的rsyslog服务端口。
facility指定产生日志的实体,有一些固定的选择,比如kern,mail,user,local0,local1等。
severity指定日志级别(不是nginx的日志级别)。
tag指定标识,这里设置的tag为"nginx"。
error指定了nginx的日志级别,根据需要也可以选其它级别,例如warn,info,debug等。
配置rsyslog服务
编辑/etc/rsyslog.conf,添加配置如下
#启用udp模块
module(load="imudp")
#输入是udp协议,端口514
input(type="imudp" port="514")
#ficility为local0的日志输出到/var/log/error.log
local0.* -/var/log/error.log
这里是把facility为local0的syslog输出到本机的/var/log/error.log文件,也可以传输到远程数据库。由于手头没有数据库,不列举配置了。
配置好之后systemctl restart rsyslog就好了(具体service名字用tab补全)。
错误日志格式
示例如下

Nginx 错误日志格式,每个红框是一个字段,从左到右,从上到下依次是
syslog header中的时间,时间格式可以通过ActionFileDefaultTemplate设置
hostname,我的主机名这是的是A,不确定是hostname变量转小写了还是syslog输出转的。
tag,这里设置的值是nginx。
nginx日志时间,nginx日志默认时间精度是秒,我自己改成毫秒了,代码中修改的位置是ngx_cached_err_log_time变量赋值的部分,毫秒直接用tp->msec就好了。
[error] 是日志级别
271612#0是记录的进程PID和线程TID,用#分割
*301xxx 是连接ID
connect() failed xxxx这部分就是nginx代码里面输出的具体错误信息