Log4Net:如何处理对同一文件的并发?

时间:2016-09-27 06:57:08

标签: c# .net log4net

我们有一个由多个应用程序组成的大解决方案。其中一个应用程序定期运行(每10分钟一次),有时如果计算机繁忙,两个执行可能并行运行。 (问题不在于它是否是一个好主意。)

我们目前唯一的问题是,有时候,两个重叠的进程对同一个文件都有一个ILogger,我们从log4net得到一个错误,表明它无法访问该文件(已经使用过的文件)通过另一个过程或类似的东西)。

以下是我们如何配置日志:

        RollingFileAppender appender = new RollingFileAppender
        {
            Name = appenderName,
            File = fileName,
            AppendToFile = true,
            MaxSizeRollBackups = 10,
            MaximumFileSize = "10MB",
            RollingStyle = RollingFileAppender.RollingMode.Size,
            StaticLogFileName = false,
            LockingModel = new FileAppender.MinimalLock(),
            ImmediateFlush = true
        };

处理此问题的最佳方法是什么?我们每次执行都不能有一个文件。

编辑

这是我得到的错误:

log4net:ERROR [RollingFileAppender] Unable to acquire lock on file XXXX. The process cannot acces the file because it is being used by another process.

1 个答案:

答案 0 :(得分:0)

如果有多个文件写入同一文件,则可以使用FileAppender.InterProcessLock模型。这将基于互斥锁来锁定和解锁文件,而不是尝试以最小的锁定时间来修复它。