Log4j SyslogAppender没有尝试连接

时间:2013-08-27 21:36:15

标签: tomcat log4j

我有一个使用log4j写日志文件的应用程序。我无法访问源代码,但我可以假设,如果我在log4j.xml文件中创建一个appender,它应该使用该appender而不需要更改代码。

目前我可以确认没有通过wireshark从系统生成到远程syslog服务器的数据包。我可以telnet到端口514上的远程syslog服务器并写入消息没有问题。我可以假设我的XML有些不对劲,但我没有消息告诉我错误是什么。

这是Appender:

<appender name="SYSLOG" class="org.apache.log4j.net.SyslogAppender">
    <param name="Facility" value="USER" /> 
    <param name="syslogHost" value="172.16.81.39:514" />
    <param name="Threshold" value="INFO" /> 
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{yyyy/MM/dd HH:mm:ss.SSS}][%5p](%t) %m%n" />
    </layout>
</appender>

我也尝试过Log4j 2语法

<appender name="syslog" class="org.apache.log4j.net.SyslogAppender">
    <param name="format" value="bsd" />
    <param name="host" value="172.16.81.39" />
    <param name="port" value="514" />
    <param name="protocol" value="TCP" />
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="[%d{yyyy/MM/dd HH:mm:ss.SSS}][%5p](%t) %m%n" />
    </layout>
</appender>

这是相应的记录器:

<logger name="printing.com.application" additivity="false">
    <level value="INFO" />
    <appender-ref ref="SYSLOG" />
</logger>

如果我将<appender-ref />更改为默认的PRINTING_MONTHLY_ROLL,则会将其打印到日志文件中。


编辑:仍然难倒但我会在我的问题上添加更多信息

1:如果我将默认PRINTING_MONTHLY_ROLL重命名为SYSLOG,则邮件会正确输出到日志文件

2:如果我给记录器一个虚假名称,那么我在系统日志中看到log4j init错误消息

3:如果我给syslog appender一个不正确的主机参数,它会给我一个错误,指出主机无法找到并且日志记录将失败。由于在保存原始问题中列出的配置后没有收到此消息,我只能假设语法没有错误。

4:两边的防火墙都不是问题。我可以与telnet建立连接,并确认端口TCP:514在正确的方向上是允许的。

1 个答案:

答案 0 :(得分:0)

我遇到了相同的行为,Syslog appender没有尝试连接,如果我停止并重启应用程序几次,当它正确记录但是大多数情况下没有,所以我认为这是Syslog appender中的一个错误

---更新---

就我而言,我刚发现问题与DNS解析有关,请尝试在我的rsyslogd配置中禁用来自远程主机的消息的DNS解析,在我发现的arm设备上的ubuntu中/ etc / default / rsyslog中的选项

# Options for rsyslogd
# -x disables DNS lookups for remote messages
# See rsyslogd(8) for more details
RSYSLOGD_OPTIONS="-x"
相关问题