当配置为使用非默认锁定时,log4net会抛出异常

时间:2014-01-06 11:49:24

标签: c# log4net

我希望这不是主题,但它是一个C#.Net问题:

我正在使用log4net 1.2.10。已经在apache log4net论坛上声明,从1.2.9开始,可以使用不同的文件锁定模式。我已根据给出的示例配置了log4net以使用非默认方法(最小锁定或进程间锁定),但立即生效的是以下错误消息:

log4net:错误XmlHierarchyConfigurator:无法在[log4net.Repository.Hierarchy.DefaultLoggerFactory + LoggerImpl]上找到设置对象的Property [lockingModel] log4net:ERROR [RollingFileAppender]无法获取文件C:\ Program Files(x86)\ Autoscribe \ Matrix Gemini LIMS \ Exe \ log \ Trace.log上的锁定。该进程无法访问文件'C:\ Program Files(x86)\ Autoscribe \ Matrix Gemini LIMS \ Exe \ log \ Trace.log',因为它正由另一个进程使用。

我的log4net.config文件是:

    <logger name="Matrix.Trace">
         <!--this is for routine debug logging to a file--> 
        <level value="OFF" />
             <lockingModel type="log4net.Appender.RollingFileAppender+InterProcessLock" />
        <appender-ref ref="RollingFileAppenderTRACE" />
    </logger>

    <appender name="RollingFileAppenderTRACE" type="log4net.Appender.RollingFileAppender">
        <file value=".\log\Trace.log" />
        <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%m%newline" />
        </layout>
        <appendToFile value="true" />
        <maximumFileSize value="100KB" />
        <maxSizeRollBackups value="2" />
    </appender>

等...

我的C#应用​​程序执行此操作:

    private static readonly ILog bllDebugLog = LogManager.GetLogger("Matrix.Trace"); //for debugging

        log4net.Config.XmlConfigurator.ConfigureAndWatch(new System.IO.FileInfo("log4net.config"));

如果我使用默认锁定方法,则日志记录确实有效(但我有多个进程的文件锁定问题,这正是我试图解决的问题。)

我无法从log4net文档中看到为什么会失败。该错误似乎表明log4net 1.2.10不支持非默认锁定,但apache文档非常清楚它应该。我究竟做错了什么?

TIA

1 个答案:

答案 0 :(得分:2)

全面道歉 - 我愚蠢。锁模型位需要进入appender定义,而不是记录器定义,看来锁模型应该是log4net.Appender.FileAppender + InterProcessLock,而不是log4net.Appender.RollingFileAppender + InterProcessLock(即使我使用的是RollingFileAppender记录器类型) )。