【发布时间】:2013-08-30 19:37:47
【问题描述】:
我有一个使用 log4j 写入日志文件的应用程序。我无权访问源代码,但我可以假设如果我在 log4j.xml 文件中创建一个附加程序,它应该使用该附加程序而不需要更改代码。
目前我可以确认没有通过wireshark从系统生成数据包到远程系统日志服务器。我可以远程登录到端口 514 上的远程系统日志服务器并毫无问题地写入消息。我可以假设我的 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:
<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 允许在正确的方向两侧。
【问题讨论】:
-
您是否尝试使用简单的文件日志或控制台日志附加程序来查看您的配置更改是否适用?
-
是的。更改已应用。