Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何更改Log4j写入Linux系统日志的消息中的localhost.localdomain_Java_Linux_Log4j_Syslog - Fatal编程技术网

Java 如何更改Log4j写入Linux系统日志的消息中的localhost.localdomain

Java 如何更改Log4j写入Linux系统日志的消息中的localhost.localdomain,java,linux,log4j,syslog,Java,Linux,Log4j,Syslog,我正在使用Log4j及其SyslogAppender向Linux系统日志写入消息。输出的消息如下所示: Oct 12 09:06:03 localhost.localdomain 3364 [Thread-5] INFO TEST MESSAGE MyApplicationLogger - This is my message 我想用运行应用程序的服务器的名称替换localhost.localdomain,但似乎不知道如何替换。这是我的配置文件,以防有用: log4j.logger.MyApp

我正在使用Log4j及其SyslogAppender向Linux系统日志写入消息。输出的消息如下所示:

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

但是,我不太愿意更改此设置。

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

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

$ hostname myServersHostname

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

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

我找到了解决方法,所以我最好把解决方案留在这里,以防其他人遇到同样的问题

在属性文件中,放置以下内容:

log4j.appender.SyslogAppender.syslogHost=server12
不确定它为什么会工作,但使用服务器名而不是本地主机对我来说很有效。

这就是您需要的:

log4j.appender.SyslogAppender.header = true

如果您不想在log4j属性或XML文件中对主机名进行“硬编码”,那么最好的解决方案是结合dtyler和yegor256的建议。确保主机名设置正确,然后在log4j.xml中使用
log4j.appender.SyslogAppender.header=true
,感谢您分享此解决方案。我们使用虚拟IP(“VIP”),希望主机名保持原样,但不幸的是,log4j将其解析为IP地址。不过,至少有了这些信息,我们可以将其配置为VIP的当前IP地址。