我有一个自定义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因此它不适用于我的用例.任何帮助都会得到满足.
就我而言,这发生在我Appender调用正在记录的代码时。因此,发生了递归日志记录。如下图所示:
-> Appender -> MyClassThatLogs -> Appender -> MyClassThatLogs -> etc...
Run Code Online (Sandbox Code Playgroud)
另请参阅此 SO 帖子: 自定义 log4net appender 中的日志记录/错误处理
| 归档时间: |
|
| 查看次数: |
3435 次 |
| 最近记录: |