将log4j日志写入syslog
由于工作需要,这几天研究了一下怎样将log4j的日志写入到syslog中。syslogd是UNIX系统的一个常见的组件,用于执行系统日志记录活动。syslogd从一组日志源(如:/dev/log和/dev/klog)中读取数据,并按/etc/syslog.conf中的说明处理这些日志消息。通过syslog()调用,将应用程序日志消息记录到syslog中。
log4j是一款相当强大的开源日志工具,他能通过简单的配置将日志发送到文件、数据库、远程网络等各种地方。要在java程序中将log4j的日志信息发送到远程linux服务器的syslog中,也只需一点简单的配置就可以实现。
第一步,应该修改syslog的配置文件,因为syslog默认的配置是不能接收网络数据的,其配置文件syslog.conf文件通常在 /etc下:在文件中加入: *.* local5,local7.none;<tab>;<tab> /usr/adm/network.log 其次 启动syslog需使用:syslogd -r命令,否则不能接收网络数据,同时应注意关掉linux的防火墙。
第二步,配置log4j的properties文件,加入以下语句:
log4j.appender.syslog=org.apache.log4j.net.SyslogAppender
log4j.appender.syslog.SyslogHost=syslog服务器IP
log4j.appender.syslog.Facility=LOCAL5
log4j.appender.syslog.layout=org.apache.log4j.PatternLayout
log4j.appender.syslog.layout.ConversionPattern=%d [%t] %p %c - %m %n通过以上配置,你在程序中使用log4j时,其日志信息将发送给syslog,具体保存在那里要看syslog.conf文件的
配置,如:*.info;mail.none;authpriv.none;cron.none /var/log/messages 此句表示,只将info等级的信息保存在
/var/log/messages文件中。(syslog.conf的详细配置网上有很多介绍,这里就不在讲了)
最后讲一点,如果在程序中修改了log4j配置,可以使用PropertyConfigurator.configureAndWatch("../sslsec/conf/log4j.properties", 1000);命令使log4j自动检查配置文件是否被修改,如修改了则自动使用新的配置而不必重启log4j。