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

| 我有一个Java程序,它在同一服务器上作为3个独立的进程运行。我希望所有过程都共享一个日志文件,是否可以在logging.properties文件中指定它?我正在使用java.util.logging处理日志记录。 当前,这是我在logging.properties文件中定义FileHandler的方式: java.util.logging.FileHandler.pattern =%h / log / logfile.log 这对于该程序的1个实例正常工作,但是,如果我尝试启动该程序的3个单独的实例,结果是: 日志文件 logfile.log.1 logfile.log.2 有什么建议吗? 谢谢     
已邀请:
Logback是另一个记录器,但它支持您的情况。 来自文档:http://logback.qos.ch/manual/appenders.html 检出FileAppender的谨慎模式     
不建议从不同的进程(不同的JVM)写入同一文件。 唯一安全的方法是以某种方式锁定文件,打开文件,写入文件然后关闭文件。这大大减慢了每次书写的速度,这通常对于记录器来说是不可接受的。如果您确实想采用这种方式,则始终可以编写自己的处理程序。     
我会编写第二个Java程序-记录器。让其他进程将日志消息发送到日志记录程序,然后将其写入单个日志文件。您可以使用套接字在程序之间进行通信。这是如何执行此操作的示例。 保罗     
详细说明保罗的答案,您可以使用SocketHandler将日志事件从所有进程定向到单个进程,该进程实际上是写入文件的。 大多数日志包都提供此功能的简单实现。另一个广泛支持的选项是与系统的日志记录工具(Window的事件日志或syslogd)集成。     

要回复问题请先登录注册