log4j创建的文件中的主机名

3

我正在使用Linux机器(RHEL 5.4)上的Java 1.4.2。

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

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

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

我错过了什么吗?

3个回答

2

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

当您提取喜欢的主机名后,然后查看如何将其保存在log4j MDC中 - 它是一个伪装成Map的对象 - 这样您就可以在配置中的日志字符串中引用它了。


我本来想点赞的,但链接示例已经失效了,这就是为什么使用链接对业务不利。 :-/ - Chris K
它不仅仅是在反弹,它要么被劫持了,要么现在有一个域名垃圾邮件发送者坐在那里。很高兴看到你还在这里。我想回溯机器对于问题的解决始终是一个选择。https://web.archive.org/web/20120408141415/http://www.exampledepot.com/egs/java.net/Local.html说实话,不知道为什么不直接在该网站上发布代码示例会更容易些。 - Chris K

1

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

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

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


0
我认为你需要扩展FileAppender并覆盖activateOptions()方法,将fileName属性设置为所需值。从某些属性中读取主机名或从InetAddress.getLocalHost().getHostName()中获取它。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接