繁体   English   中英

log4net暂时禁用线程内的调试日志记录

[英]log4net Temporarily Disable Debug Logging Within a Thread

我有一个多线程应用程序,在该应用程序中,我想在执行某些日志记录堵塞工作时临时关闭特定线程中的调试日志记录,而不会影响其他线程。 能做到吗?

我们的班级通过检索记录器

private static readonly ILog Logger = LoggerUtil.GetLogger();

public static class LoggerUtil
{
    public static ILog GetLogger()
    {
        var type = ReflectionUtil.GetCallingMethod().DeclaringType;
        return LogManager.GetLogger(type);
    }
}

更新:现在,我围绕LogManager.GetLogger(type).Logger和ThreadStatic IsDebugEnabled变量创建了一个Decorator。 这样,两个线程可以利用同一个实用程序类,一个将调试而一个则不会。 这是有问题的,因为它与呼叫类和线路号混在一起。

    public void Debug(object message)
    {
        if (_decorated.IsDebugEnabled && LoggerUtil.IsDebugEnabled)
        {
            _decorated.Log(typeof (MyLoggerDecorator), Level.Debug, message, null);
        }
    }

您可以编写自己的自定义IFilter实现,以查看ThreadStatic变量。

(我可能还会创建一个IDisposable实现,该实现在构造函数中将变量设置为true,并在Dispose()方法中将其设置为false,因此您将代码包装在using块中,以便重新启用它当您using上下文弹出窗口时(例如,如果有例外),该列表会自动显示。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM