2013-08-27 101 views
1

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

目前我可以确认没有数据包正在通过wireshark从系统生成到远程系统日志服务器。我可以通过端口514远程登录到远程系统日志服务器,并写入消息时没有问题。我可以认为我的XML有些不正确,但我没有消息告诉我错误是什么。

这里的追加程序:

<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_ROLLSYSLOG则消息是正确输出到日志文件

2:如果我给logger一个虚假的名字,那么我在系统日志中看到log4j初始化错误消息

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

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

+0

您是否尝试过简单的文件日志或控制台日志appender以查看您的配置更改是否适用? –

+0

是的。这些更改已应用。 – Tim

回答

0

我遇到了同样的行为,系统日志appender不会尝试连接,如果我停止并重新启动应用程序多次它有一点记录正确,但大多不是,所以我认为这是一个系统日志appender中的错误

--- UPDATE ---

在我的情况我刚刚发现的问题是关于DNS解析,尝试禁用从远程主机即将在rsyslogd配置消息的DNS解析,在Ubuntu上arm设备我在/ etc/default/rsyslog中找到了选项

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