项目中有需要log4j2+ syslog的开发需求,说是开发,其实只是配置配置而已,这里主要讲linux环境中的配置
打开http://logging.apache.org/log4j/,点击左侧Download,我下载的是Apache Log4j 2 binary (zip),目前是2.0.2版本。解压后有30几个jar包,大部分是跟兼容性及移植性相关的可选组件,我们要用的是:
log4j-api-2.0.2.jar
log4j-core-2.0.2.jar
Log4j2.xml 基本配置这里就不赘述,只讲于syslog集成的部分;
在<Appenders> 中加入以下配置:
<Syslog name="SYSLOG" host="localhost" port="514" protocol="UDP" facility="LOCAL3"/>
<appender-ref ref="SYSLOG"/>
host是指你将要把日志写到的目标机器,可以是ip(本地ip或远程ip,远程ip在实际项目中很常见,有专门的日志服务器来存储日志),也可以使用主机名,如果是本地,还可以使用localhost或127.0.0.1
Port指定端口,默认514,参见/etc/rsyslog.conf(以Fedora系统为例,下同)。protocol指定传输协议,这里是UDP,facility是可选项,后面可以看到用法,具体关于facility的规则可以点击:http://logging.apache.org/log4j/2.x/manual/appenders.html#SyslogAppender
Syslog及Syslog-ng相关配置(Fedora)
在运行程序之前,需要修改
/etc/rsyslog.conf
把这两行前的#去掉,即取消注释:
#$ModLoad imudp
#$UDPServerRun 514
这里启用udp监听,514是默认监听端口,重启syslog:
service syslog restart 或者
sudo systemctl restart rsyslog
查看是否启用
sudo netstat -tulpn | grep rsyslog
大部分日志会默认写到/var/log/messages中,如果不想写到这个文件里,可以按下面修改,这样local3的日志就会写到app.log中。这里的local3即 log4j2.xml中facility的配置。
*.info;mail.none;authpriv.none;cron.none;local3.none /var/log/messages
新增一行
local3.* /var/log/local_sys.log
需要注意的几点,
1、syslog服务是否启动?
2、防火墙关闭或者端口号是否打开?
3、配置是否一致
如上配置无误,测试log有日志打印,去/var/log/下去查看配置日志是否输出