【发布时间】:2010-11-18 05:21:36
【问题描述】:
暂时忘记你为什么要做这样的事情的问题 - 如果出于某种原因,两个 FileAppender 配置了相同的文件 - 这种设置会起作用吗?
【问题讨论】:
标签: log4j appender fileappender
暂时忘记你为什么要做这样的事情的问题 - 如果出于某种原因,两个 FileAppender 配置了相同的文件 - 这种设置会起作用吗?
【问题讨论】:
标签: log4j appender fileappender
它没有直接回答你的问题,但是 log4*net* 的 FileAppender 有一个 LockingModel 属性,你可以将它设置为仅在文件实际使用时才锁定。因此,如果您有两个 FileAppender 在同一个线程中工作并设置了 MinimalLock,它可能会工作得很好。在不同的线程上,您可能偶尔会遇到死锁。
FileAppender 通过 LockingModel 属性支持可插入的文件锁定模型。 FileAppender.ExclusiveLock 实现的默认行为是获取文件的独占写入锁,直到此附加程序关闭。替代模型 FileAppender.MinimalLock 仅在 appender 写入日志事件时持有写锁。
粗略的网络搜索没有找到任何关于在 log4j 中实现 MinimalLock 的有用结果。
【讨论】:
Log4j 的 FileAppender 不允许两个 JVM 写入同一个文件。如果你尝试,你会得到一个损坏的日志文件。但是,prudent mode 中的 log4j 的继承者 logback 允许即使在不同的 JVM 中的两个 appender 也可以写入同一个文件。
【讨论】:
如何让多个进程登录到同一个文件?
您可以将每个进程记录到 SocketAppender。接收 SocketServer(或 SimpleSocketServer)可以接收所有事件并将它们发送到单个日志文件。
至于这究竟意味着什么,我将自己调查。
我还在另一个SO question 上找到了以下解决方法:
【讨论】: