我有一个多线程应用程序,我想暂时关闭特定线程中的调试日志记录,同时执行一些日志记录阻塞工作,不会影响其他线程。可以这样做吗?
我们的班级通过
检索记录器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);
}
}
答案 0 :(得分:0)
您可以编写自己的自定义IFilter
实现,查看ThreadStatic
变量。
(我可能还会创建一个IDisposable实现,在构造函数中将变量设置为true,并在Dispose()
方法中将其设置为false,因此您将代码包装在using
块中因此,当你弹出那个using
上下文时,你会自动重新启用它,例如,如果有异常。)