Linux 使用log4j将日志数据写入syslog

Linux 使用log4j将日志数据写入syslog,linux,log4j,syslog,rsyslog,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.getL

我无法将日志消息写入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

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

$ModLoad imudp
$UDPServerRun 514
这对我有用


修改后需要重新启动rsyslog

以上@Sandeep的答案是正确的,但它是2012年的,所以我想为使用更新设置的用户扩展一下。例如,在Ubuntu18.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服务rsyslog restart
对我来说很有效。Java Log4J Syslog appender()期望
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”的侦听器).

进行这些更改后,您可能还需要重新启动rsyslogd。是的,忘了提及它。Thanks@SandeepRao完美的我花了大约一个小时试图理解为什么我在MySQL数据库中没有从LOG4J中看到任何东西:-)谢谢。这很有效,尽管我无法在rsyslog服务器中找到日志的保存位置,所以这一行在/etc/rsyslog.conf文件中实现了神奇的效果<代码>*.info;邮件:无;authpriv.none;cron.none/var/log/messages