log4j创建的文件中的主机名

我在Linux机器上使用java 1.4.2(RHEL 5.4)。

我们的应用程序使用log4j进行日志记录 我希望有些appender会在文件名中创建包含hostname的文件。 主机名不应该是硬编码的,而是使用类似于此处的系统属性(请参阅$ {log4j.minutes})。

所以问题是系统属性中是否有主机名。 根据这里 ,没有默认的主机名属性。

这意味着我需要从命令行的代码(-D flag)添加主机名作为系统属性。

我错过了什么吗?

不可以。系统属性中没有默认主机名。 此外,计算机可能具有多个网卡,并且每个网卡可能分配了多个IP号码,并且每个IP号码可能具有其自己的名称,因此可能存在几个“默认主机名”可能的候选者。

当您提取了您喜欢的主机名后,请查看如何将其保存在log4j MDC中 – 这是伪装的Map – 因此您可以在配置中的日志字符串中引用。

Linux环境中的另一个选项是使用SyslogAppender,它包括输出中的主机,并允许您像集中式日志聚合一样的好处。 您需要将header属性设置为true以启用时间戳,并在标准syslog约定中发送主机。 如果你这样做,那么你得到这样的输出,其中xenon是机器的主机名:

Apr 25 14:33:17 xenon INFO Some log message

在此示例中,转换模式为%-5p %c{2} - %m%n

我认为您必须扩展FileAppender并覆盖activateOptions()以将fileName属性设置为所需的值。 从某个属性读取主机名,或从InetAddress.getLocalHost()。getHostName()获取它。