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

时间:2016-03-03 16:54:53

标签: c# log4net

我有一个多线程应用程序,我想暂时关闭特定线程中的调试日志记录,同时执行一些日志记录阻塞工作,不会影响其他线程。可以这样做吗?

我们的班级通过

检索记录器
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(类型).Logger和ThreadStatic IsDebugEnabled变量周围创建了一个Decorator。这样两个线程可以利用相同的实用程序类,一个将调试,一个不会。这是有问题的,因为它与Calling Class和Line Number混淆......

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

1 个答案:

答案 0 :(得分:0)

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

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