5

暂时忘记为什么你会做这样的事情的问题 - 如果出于某种原因,两个 FileAppenders 配置了相同的文件 - 这种设置会起作用吗?

4

3 回答 3

4

Log4j 的 FileAppender 不允许两个 JVM 写入同一个文件。如果你尝试,你会得到一个损坏的日志文件。然而,log4j 的继任者 logback 在谨慎模式下允许两个附加程序甚至在不同的 JVM 中写入同一个文件。

于 2009-08-10T21:51:00.633 回答
0

来自Log4j FAQ a3.3

如何让多个进程登录到同一个文件?

您可能会将每个进程记录到 SocketAppender。接收 SocketServer(或 SimpleSocketServer)可以接收所有事件并将它们发送到单个日志文件。

至于这实际上意味着什么,我将自己调查。

我还在另一个SO 问题上找到了以下解决方法:

代码 + 示例

于 2014-09-12T07:31:46.763 回答
0

它不会直接回答您的问题,但 log4*net* 的 FileAppender 有一个 LockingModel 属性,您可以将其设置为仅在文件实际使用时才锁定。因此,如果您有两个 FileAppender 在同一个线程中工作并设置了 MinimalLock,它可能会工作得很好。在不同的线程上,您可能偶尔会遇到死锁。

FileAppender 通过 LockingModel 属性支持可插入的文件锁定模型。FileAppender.ExclusiveLock 实现的默认行为是获取文件的独占写入锁,直到此附加程序关闭。替代模型 FileAppender.MinimalLock 仅在 appender 写入日志事件时持有写锁。

粗略的网络搜索没有找到任何关于在 log4j 中实现 MinimalLock 的有用结果。

于 2009-08-10T11:21:24.050 回答