我正在使用Log4j及其SyslogAppender向Linux syslog写入消息。输出的消息如下所示:
Oct 12 09:06:03 localhost.localdomain 3364 [Thread-5] INFO TEST MESSAGE MyApplicationLogger - This is my message
我想将localhost.localdomain替换为运行应用程序的服务器的名称,但似乎无法弄清楚如何。这是我的配置文件,以防它有用:
log4j.logger.MyApplicationLogger=INFO, SyslogAppender
log4j.appender.SyslogAppender=org.apache.log4j.net.SyslogAppender
log4j.appender.SyslogAppender.syslogHost=localhost
log4j.appender.SyslogAppender.Facility=USER
log4j.appender.SyslogAppender.layout=org.apache.log4j.PatternLayout
log4j.appender.SyslogAppender.layout.ConversionPattern= %-4r [%t] %-5p %c %x - %m%n
log4j.appender.SyslogAppender.source=My Application
编辑:在服务器上配置了计算机名称,hostname命令返回以下内容:
$ hostname
server12
但我注意到hosts文件的第一行是
127.0.0.1 localhost.localdomain localhost
然而,我对改变这一点犹豫不决。
答案 0 :(得分:4)
这就是你需要的:
log4j.appender.SyslogAppender.header = true
答案 1 :(得分:3)
此问题是因为您的计算机不知道它自己的主机名。
这可以通过将命令hostname
作为非特权用户运行来证明。
如果您拥有root权限,则可以使用
设置主机名$ hostname myServersHostname
要在重新启动后永久更改此更改,您需要在/ etc中的某个位置设置配置文件(具体取决于您的发行版)。
答案 2 :(得分:1)
我想出了如何修复它,所以我不妨在这里留下解决方案,以防其他人遇到同样的问题。
在属性文件中,输入:
log4j.appender.SyslogAppender.syslogHost=server12
不确定为什么会这样,但使用服务器名称而不是localhost对我有用。
答案 3 :(得分:0)
如果您不想在log4j属性或XML文件中对主机名进行“硬编码”,那么最佳解决方案是dtyler和yegor256建议的组合。确保正确设置主机名,然后在log4j.xml中使用log4j.appender.SyslogAppender.header = true
或<param name="Header" value="true"/>