log4j创建的文件中的主机名

时间:2011-07-04 14:53:23

标签: java logging log4j

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

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

所以问题是系统属性中是否有主机名。 根据{{​​3}},没有默认的主机名属性。

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

我错过了什么吗?

3 个答案:

答案 0 :(得分:2)

没有。系统属性中没有默认主机名。计算机也可能有多个网卡,每个网卡可能分配了多个IP号码,每个IP号码可能都有自己的名称,因此“默认主机名”可能有几个候选者。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

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