将log4j日志写入Linux 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。


Log4j在Linux下打印日志到SysLog

 

使用Log4j将日志打印到Linux的系统日志中需要用SyslogAppender,这在Log4j发行版的例子和网上都可以找到不错的配置参考。
在Linux下打Syslog大概有两种方式,一是调用本地库,二是通过socket。看了SyslogAppender的源代码,没有jni,所以一定是后者了。在配置文件中打开syslog的远程log选项即可。

具体操作如下(RH系):
1.编辑/etc/sysconfig/syslog。
2.在SYSLOGD_OPTIONS中追加-r。
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r -m 0"
3.重启syslog服务。
$ /etc/init.d/syslog restart  

posted @ 2010-06-09 16:05  留心_frankliujava  阅读(12968)  评论(0编辑  收藏  举报