我从1.2.11将log4net升级到版本1.2.13,现在只要我的应用程序抛出异常,它就会抛出以下异常:
Error: log4net:ERROR Exception while logging
log4net:ERROR Exception while logging
Error: System.Threading.LockRecursionException: Recursive read lock acquisitions not allowed in this mode.
at System.Threading.ReaderWriterLockSlim.TryEnterReadLockCore(TimeoutTracker timeout)
at System.Threading.ReaderWriterLockSlim.TryEnterReadLock(TimeoutTracker timeout)
at System.Threading.ReaderWriterLockSlim.TryEnterReadLock(Int32 millisecondsTimeout)
at System.Threading.ReaderWriterLockSlim.EnterReadLock()
at log4net.Util.ReaderWriterLock.AcquireReaderLock()
at log4net.Repository.Hierarchy.Logger.CallAppenders(LoggingEvent loggingEvent)
at log4net.Repository.Hierarchy.Logger.ForcedLog(Type callerStackBoundaryDeclaringType, Level level, Object message, Exception exception)
at log4net.Repository.Hierarchy.Logger.Log(Type callerStackBoundaryDeclaringType, Level level, Object message, Exception exception)
当我的应用程序没有抛出异常时,日志记录照常工作。如果有人能够提供有关为什么会发生这种情况的见解,我将非常感激。
答案 0 :(得分:1)
在我的应用程序中,这显然发生在记录消息时访问记录器时。例如,
private static readonly ILog iLog = LogManager.GetLogger(
MethodBase.GetCurrentMethod().DeclaringType);
public void Configure(){
iLog.InfoFormat("Found project '{0}'.", GetProject());
... do stuff ...
}
private string GetProject()
{
string result = null;
iLog.Debug("Trying to determine project.");
.... do stuff ...
return result;
}
除了避免这种情况,我还没有找到解决办法。
编辑:切换到NLog后,日志工作开箱即用,所以我猜这是log4net中的一个错误。顺便说一句,切换很容易,NLog也更容易使用。
答案 1 :(得分:0)
log4net 1.2.14版本似乎修复了这个bug。见in this example
[更新]即使使用1.2.15,我也可以重现这个问题。碰巧我的本地日志DB被填满了,因此多次看到这个错误。