使用log4j将日志数据写入syslog

时间:2012-11-05 15:02:31

标签: linux log4j syslog rsyslog

我无法将日志消息写入syslog。任何帮助都会很棒。 这是我简单的log4j程序

import org.apache.log4j.Logger;
import java.io.*;
import java.sql.SQLException;
import java.util.*;

public class log4jExample
{
  /* Get actual class name to be printed on */
  static Logger log = Logger.getLogger(log4jExample.class.getName());

  public static void main(String[] args) throws IOException,SQLException
  {

     log.error("Hello this is an error message");
     log.info("Hello this is an info message");
     log.fatal("Fatal error message");
  }
}

我的系统日志属性文件

# configure the root logger
log4j.rootLogger=INFO, SYSLOG


# configure Syslog facility LOCAL1 appender
log4j.appender.SYSLOG=org.apache.log4j.net.SyslogAppender
log4j.appender.SYSLOG.threshold=WARN
log4j.appender.SYSLOG.syslogHost=localhost
log4j.appender.SYSLOG.facility=LOCAL4
log4j.appender.SYSLOG.layout=org.apache.log4j.PatternLayout
log4j.appender.SYSLOG.layout.conversionPattern=[%p] %c:%L - %m%n

2 个答案:

答案 0 :(得分:13)

将以下行添加到rsyslog.conf文件

$ModLoad imudp
$UDPServerRun 514

它对我有用。

需要在修改后重新启动rsyslog。

答案 1 :(得分:0)

上面@Sandeep的答案是正确的,但这是从2012年开始的,所以我想为使用最新设置的人们扩大一点。例如,在Ubuntu 18.04上,/etc/rsyslog.conf文件现在在文件顶部附近具有如下所示的数据:

#################
#### MODULES ####
#################

module(load="imuxsock") # provides support for local system logging
#module(load="immark")  # provides --MARK-- message capability

# provides UDP syslog reception
#module(load="imudp")
#input(type="imudp" port="514")

# provides TCP syslog reception
#module(load="imtcp")
#input(type="imtcp" port="514")

取消注释两条UDP行,然后运行sudo service rsyslog restart对我有用。 Java Log4J Syslog附加器(https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SyslogAppender.html)期望syslog在本地主机上的UDP端口514上进行侦听。

为进一步提高安全性,您还可以考虑绑定到环回地址,这样,如果不需要端口514,则在主机外部不可见端口

input(type="imudp" port="514" address="127.0.0.1")

还可以进行此更新而无需触摸现有的/etc/rsyslog.conf文件;相反,您可以在/etc/rsyslog.d/目录下添加一个新的conf文件,例如/etc/rsyslog.d/10-open-upd-port.conf,仅包含以下几行:

module(load="imudp")
input(type="imudp" port="514" address="127.0.0.1")

然后如上所述重新启动rsyslog守护程序。

要查看rsyslog守护程序是否正在主动侦听UDP端口514,我还发现此命令也很有用:sudo lsof -iUDP:514 -nP -c rsyslogd -a(显示端口UDP 514上的侦听器,其命令是“ rsyslogd” )。

相关问题