Log4net在此模式下不允许递归读锁定采集

Dre*_*rew 5 .net c# log4net

我有一个自定义log4net appender,如下所示:

public class MyAppender : AppenderSkeleton
{
    protected override void Append(LoggingEvent loggingEvent)
    {
        try
        {
            if (loggingEvent.Level == Level.Error || loggingEvent.Level == Level.Fatal)
            {
                DoWork(RenderLoggingEvent(loggingEvent));
            }
        }
        catch
        {
            // silently fail 
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

时不时地,我会在输出中看到这个异常:

log4net:ERROR Exception while logging
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.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)
Run Code Online (Sandbox Code Playgroud)

appender似乎工作正常,我的应用程序没有显示任何错误,但这些消息太烦人了.我喜欢干净的运行软件,这不干净=(

我的appender实现好吗?我可以包含一些配置以避免此错误吗?我可以从gooogs找到的最接近的答案来自这个bug报告log4net bug.我没有调用GetAppenders因此它不适用于我的用例.任何帮助都会得到满足.

Pau*_*aul 5

就我而言,这发生在我Appender调用正在记录的代码时。因此,发生了递归日志记录。如下图所示:

-> Appender -> MyClassThatLogs -> Appender -> MyClassThatLogs -> etc...
Run Code Online (Sandbox Code Playgroud)

另请参阅此 SO 帖子: 自定义 log4net appender 中的日志记录/错误处理