两个log4j fileappender可以写入同一个文件吗?

时间:2009-08-10 07:48:13

标签: log4j appender fileappender

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

3 个答案:

答案 0 :(得分:4)

Log4j的FileAppender不允许两个JVM写入同一个文件。如果你尝试,你会得到一个损坏的日志文件。但是,prudent mode中的logback,log4j的后继,允许两个appender甚至在不同的JVM中写入同一个文件。

答案 1 :(得分:0)

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

  

FileAppender通过LockingModel属性支持可插入文件锁定模型。 FileAppender.ExclusiveLock实现的默认行为是在该appender关闭之前获取文件的独占写锁定。替代模型FileAppender.MinimalLock仅在appender正在编写日志记录事件时保持写锁定。

粗略的网页搜索没有显示有关在log4j中实现MinimalLock的任何有用结果。

答案 2 :(得分:0)

来自Log4j FAQ a3.3

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

  

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

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

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

Code + Example