【问题标题】:Writing log data to syslog using log4j使用 log4j 将日志数据写入 syslog
【发布时间】:2012-10-25 10:38:36
【问题描述】:

我无法将日志消息写入系统日志。任何帮助都会很棒。 这是我的简单 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

【问题讨论】:

    标签: linux log4j syslog rsyslog


    【解决方案1】:

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

    $ModLoad imudp
    $UDPServerRun 514
    

    它对我有用。

    修改后需要重启rsyslog。

    【讨论】:

    • 在进行这些更改后,您可能还需要重新启动 rsyslogd。
    • 是的,忘了说。谢谢
    • @SandeepRao 完美!我花了大约一个小时试图了解为什么我在 LOG4J 的 MySQL 数据库中看不到任何内容 :-) 谢谢。
    • 这行得通,虽然我找不到日志在 rsyslog 服务器中的保存位置,所以这一行在 /etc/rsyslog.conf 文件中发生了奇迹; *.info;mail.none;authpriv.none;cron.none /var/log/messages
    【解决方案2】:

    上面@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 appender (https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/net/SyslogAppender.html) 期望 syslog 监听 localhost 上的 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”)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-02
      • 1970-01-01
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 2015-11-06
      相关资源
      最近更新 更多