如何将 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?
如何配置 jetty 7 以使用 syslog 或 log4j