log4net 暂时禁用线程中的调试日志记录
本文关键字:调试 日志 记录 线程 log4net | 更新日期: 2023-09-27 18:37:11
我有一个多线程应用程序,我想在其中暂时关闭带有特定线程的调试日志记录,同时它执行一些日志记录堵塞工作,不会影响其他线程。 这能做到吗?
我们的类通过以下方式检索他们的记录器
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 变量。 这样,两个线程可以利用相同的实用程序类,一个将调试,一个不会。 这是有问题的,因为它弄乱了调用类和线路号...
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
上下文时自动重新启用它,例如,如果有异常。