ExclusiveLock与MinimalLock

时间:2017-07-12 17:06:11

标签: c# log4net

我将C#函数作为回调函数传递给在C ++中创建的动态库函数。我想这些回调可能是从不同的线程调用的。回调函数使用记录器:

private static readonly log4net.ILog _Log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

当我打开使用日志记录模型的回调函数登录时,程序崩溃了:

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

使用时工作正常甚至更快:

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

我认为在我的情况下MinimalLock就足够了,因为没有文件滚动执行。我错了?如何在MinimalLock案例中解释程序减速?

    <appender name="DebugLogFileAppender" type="log4net.Appender.RollingFileAppender">
        <encoding value="utf-8" />
        <param name="File" value="./WrpLog/" />
        <_lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
        <lockingModel type="log4net.Appender.FileAppender+ExclusiveLock" />

        <appendToFile value="true" />
        <rollingStyle value="Date" />
        <datePattern value="Debu\g.yyyy-MM-dd.lo\g" />
        <staticLogFileName value="false" />
        <maxSizeRollBackups value="10" />
        <filter type="log4net.Filter.LevelRangeFilter">
            <acceptOnMatch value="true" />
            <_levelMin value="INFO" />
            <_levelMax value="OFF" />
            <levelMin value="ALL" />
            <levelMax value="DEBUG" />
        </filter>
        <layout type="log4net.Layout.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %m /// %c%n" />
        </layout>
    </appender>

1 个答案:

答案 0 :(得分:2)

使用最小锁定时,log4net会在您写入文件时锁定文件。这将在每条日志消息上完成。当您拥有Exclusive锁定时,文件始终处于锁定状态,您无需重新打开该文件。独占锁具有更好的性能,但您无法从其他位置打开/写入该文件。最小锁定允许您从多个位置写入一个文件,但是正如您所看到的那样,独占锁定的性能要差得多。

相关问题