如何使多个Java程序实例共享相同的日志FileHandler?

时间:2011-05-17 18:09:22

标签: java java.util.logging

我有一个Java程序,它在同一台服务器上作为3个独立的进程运行。我希望所有进程共享一个日志文件,有没有办法在logging.properties文件中指定它?我正在使用java.util.logging来处理日志记录。

目前,这是我在logging.properties文件中定义FileHandler的方法:

java.util.logging.FileHandler.pattern =%H /数/ LOGFILE.LOG

这适用于1个程序实例,但是,如果我尝试启动程序的3个单独实例,结果是:

LOGFILE.LOG logfile.log.1 logfile.log.2

对此有何建议?

三江源

4 个答案:

答案 0 :(得分:3)

Logback是另一个记录器,但它支持你的情况。

来自文档:http://logback.qos.ch/manual/appenders.html

检查FileAppender的谨慎模式

答案 1 :(得分:0)

不建议从不同进程(不同的JVM)写入同一文件。

唯一安全的方法是以某种方式锁定文件,打开文件,写入文件然后关闭文件。这大大减慢了每次写入,这对于记录器来说通常被认为是不可接受的。如果你真的想这样,你总是可以编写自己的处理程序。

答案 2 :(得分:0)

我会编写第二个Java程序 - 记录器。让其他进程将日志消息发送到日志记录程序,然后将其写入单个日志文件。您可以使用套接字在程序之间进行通信。 Here's an example如何做到这一点。

答案 3 :(得分:0)

Paul's answer,上详细说明您可以使用SocketHandler将所有进程的日志事件定向到单个进程,该进程实际写入文件。

大多数日志包都提供了此功能的简单实现。另一个广泛支持的选项是与系统的日志工具集成(Window的事件日志或syslogd)。