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