我在Linux机器上使用java 1.4.2(RHEL 5.4)。
我们的应用程序使用log4j进行日志记录。我希望有些appender会在文件名中创建包含hostname的文件。主机名不应该是硬编码的,而是使用类似于here的系统属性(参见$ {log4j.minutes})。
所以问题是系统属性中是否有主机名。 根据{{3}},没有默认的主机名属性。
这意味着我需要从命令行代码(-D flag)添加主机名作为系统属性。
我错过了什么吗?
答案 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