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

Posted

技术标签:

【中文标题】如何将 Log4j 写入 Linux syslog 的消息中的 localhost.localdomain 更改【英文标题】:How can I change localhost.localdomain in the messages written by Log4j to the Linux syslog 【发布时间】:2011-10-12 18:37:55 【问题描述】:

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

但是我很犹豫要不要改变这个。

【问题讨论】:

【参考方案1】:

这是你需要的:

log4j.appender.SyslogAppender.header = true

【讨论】:

【参考方案2】:

这个问题是因为您的机器不知道它自己的主机名。 这可以通过以非特权用户身份运行命令hostname 来演示。

如果你有 root 权限,那么你可以使用设置你的主机名

$ hostname myServersHostname

man page

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

Debian/ubuntu: /etc/主机名 Redhat/CentOS/Fedora:/etc/sysconfig/network

【讨论】:

【参考方案3】:

我想出了如何解决它,所以我不妨把解决方案留在这里,以防其他人遇到同样的问题。

在属性文件中,输入:

log4j.appender.SyslogAppender.syslogHost=server12

不知道为什么会这样,但是使用服务器名称而不是 localhost 对我有用。

【讨论】:

感谢您分享此解决方案。我们使用虚拟 IP(“VIP”)并希望主机名保持原样,但不幸的是 log4j 将其解析为 IP 地址。不过,至少有了这些信息,我们可以配置为 VIP 的当前 IP 地址。【参考方案4】:

如果您不想在 log4j 属性或 XML 文件中“硬编码”主机名,最好的解决方案是结合 dtyler 和 yegor256 的建议。确保您的主机名设置正确,然后在 log4j.xml 中使用 log4j.appender.SyslogAppender.header = true<param name="Header" value="true"/>

【讨论】:

以上是关于如何将 Log4j 写入 Linux syslog 的消息中的 localhost.localdomain 更改的主要内容,如果未能解决你的问题,请参考以下文章

使用 log4j 将日志数据写入 syslog

如何在通过 log4j 创建新日志文件时将日志添加到 Syslog?

如何配置 jetty 7 以使用 syslog 或 log4j

如何知道是不是使用 log4j 正确发送了 syslog 消息而不依赖于异常

如何将windows日志转成syslog格式

log4j SyslogAppender 不会将日志发送到 syslog