【问题标题】:log4net throws exception when configured to use non-default lockinglog4net 在配置为使用非默认锁定时抛出异常
【发布时间】:2014-01-06 11:49:24
【问题描述】:

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

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

log4net:ERROR XmlHierarchyConfigurator: 找不到属性 [lockingModel] 在 [log4net.Repository.Hierarchy.DefaultLoggerFactory+LoggerImpl] 上设置对象 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

【问题讨论】:

  • 我现在已经升级到 log4net 1.2.13(.net 3.5 构建),我收到一条不同的错误消息:“log4net:ERROR XmlHierarchyConfigurator: 找不到属性 [lockingModel] 在 [ log4net.Repository.Hierarchy.DefaultLoggerFactory+LoggerImpl]"。如果我在 VS 对象浏览器中查看 log4net dll,FileAppender 类显然具有该属性,那么这里是什么?

标签: c# log4net


【解决方案1】:

道歉 - 我很笨。锁定模型位需要进入附加程序定义,而不是记录器定义,看起来锁定模型应该是 log4net.Appender.FileAppender+InterProcessLock,而不是 log4net.Appender.RollingFileAppender+InterProcessLock(即使我使用的是 RollingFileAppender 记录器类型)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-18
    • 2014-05-01
    • 2022-06-16
    • 2010-12-28
    • 1970-01-01
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    相关资源
    最近更新 更多