在Java服务端使⽤syslog作为⽇志系统
1. 为什么要⽤ syslog?
使⽤ syslog 的最⼤理由就是可以集中处理⽇志,通常⼀个中⼩型的服务端10来台机器,如果⽇志集中到⼀台服务器处理起来就⾮常⽅便。
其次,你可以很⽅便地利⽤ syslog-ng 这⼀类的服务器来对⽇志进⾏分流,在只需要跟踪某⼀种类型的⽇志时就⽐较⽅便。
除此之外,⽤⽂件做⽇志在部署时总会出现⽬录不存在,⽬录没有权限的情况,⽽⽤ syslog 就没有这个问题。
2. 配置 log4j
把如下的⼀段加⼊ log4j.properties 即可把⽇志重定向到 syslog(同时保留了终端,⽅便调试)
log4j.appender.SYSLOG=org.apache.log4j.SyslogAppender
log4j.appender.SYSLOG.syslogHost=192.168.101.101
log4j.appender.SYSLOG.facility=local3
log4j2 appenderlog4j.appender.SYSLOG.facilityPrinting=false
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss}  %-5p (%C:%M:%L) - %m%n
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{dd-MM-yyyy HH:mm:ss}  %-5p (%C:%M:%L) - %m%n
syslog 的每⼀条记录有两个属性,⼀个是 facility(可⽤于⽇志分类), 另外⼀个是 priority.
facility 就在上⾯的 log4j.appender.SYSLOG.facility 属性中配置,缺省值是 user, 对于服务器,我觉得在
local0 到 local7 之间选⼀个⽐较好,便于将⽇志分类。所有可⽤的 facility 可以参考。
priority 在我们⽤ , log.warn 之类地命令进⾏⽇志操作时就已经指定了,syslog 有 8 个优先级,log4j ⽤了其中的 5 个,对应关系如下(syslog的 ALERT, CRIT, NOTICE 3个等级未被使⽤)
log4j.FATAL = 0 = syslog.EMERG
log4j.ERROR = 3 = syslog.ERR
log4j.WARN = 4 = syslog.WARNING
log4j.INFO = 6 = syslog.INFO
log4j.DEBUG = 7 = syslog.DEBUG
log4j.appender.SYSLOG.syslogHost 这个配置选项⽤于配置 syslog 机的 IP, log4j.appender.SYSLOG.facilityPrinting 设为 true 时会在每条⽇志前打印 "local3:", 在⽇志没有分流时打开此选项可以⽤tail -f /var/log/syslog | grep local3来只跟踪从你的服务器传来的⽇志。
syslog 服务端
我⼀般使⽤ syslog-ng 来作为 syslog 服务器,安装后打开/etc/f,把 "udp()" 这⼀⾏取消掉注释后重启 syslog-ng 服务即可正常使⽤,所有的⽇志会被输出到 /var/log/syslog。(注意,如果⽇志服务器在外⽹,建议修改 /etc/hosts.deny 和 /etc/hosts.allow, 防⽌被⼈灌数据灌着玩)
⼀般我们会把服务器的⽇志定向⼀个单独的⽂件来进⼀步处理,最简单的情况就是把如下的⼀段追加到 /etc/f, 然后重启 syslog-ng 服务。
filter f_foo { facility(local3); };
destination df_foo { file("/var/log/foo.log" owner("foo")); };
log {
source(s_all);
filter(f_foo);
filter(f_at_least_warn);
destination(df_foo);
};
syslog-ng 也⽀持把⽇志的输出重定向到你的程序,具体可以参见 syslog-ng 的⽂档。最后你可能需要把你的⽇志⽂件加⼊ logrotate 的配置, 这样⽅便⽇志滚动。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。