Log4Net从许多进程写入文件

时间:2012-10-06 20:01:52

标签: c# thread-safety log4net

是否可以从5个不同的进程写入同一个日志文件?

我正在使用Log4Net进行日志记录,但似乎只有一个进程正在写入该文件,当我关闭此进程时,第二个进程正在编写。

我希望所有人一起写作。

如何?

2 个答案:

答案 0 :(得分:17)

如果要从多个进程写入单个文件,请将MinimalLock添加为LockinModel<appender>节点:

<appender .... >
  ......
  <lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
  ......
</appender>

请注意这会对性能产生一些影响。

答案 1 :(得分:5)

尽管@ Erwin的建议在大多数情况下都适用,但您应该重新考虑一个更好的架构是否有助于提高性能。

例如,Microsoft IIS服务器有许多工作进程在运行,每个进程都通过命名管道向IIS服务进程发送日志条目。并且只有IIS服务进程才有权写入日志文件。通过这种方式,工作进程不需要锁定日志文件,服务进程可以缓存条目并批量写入。

遵循IIS的方法并获得良好的性能非常容易。没有文件锁。

(更新:您现在可以使用LogMaster4Net,它实现了基于UDP的架构。)