如何在Log4j写入Linux syslog的消息中更改localhost.localdomain

时间:2011-10-12 18:37:55

标签: java linux log4j syslog

我正在使用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

然而,我对改变这一点犹豫不决。

4 个答案:

答案 0 :(得分:4)

这就是你需要的:

log4j.appender.SyslogAppender.header = true

答案 1 :(得分:3)

此问题是因为您的计算机不知道它自己的主机名。 这可以通过将命令hostname作为非特权用户运行来证明。

如果您拥有root权限,则可以使用

设置主机名
$ hostname myServersHostname

man page

要在重新启动后永久更改此更改,您需要在/ etc中的某个位置设置配置文件(具体取决于您的发行版)。

  • Debian / ubuntu:/ etc / hostname
  • Redhat / CentOS / Fedora:/ etc / sysconfig / network

答案 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"/>