0
我有一個多線程的應用程序,我想暫時關閉特定線程中的調試日誌記錄,同時它執行一些日誌堵塞工作,而不影響其他線程。這可以做到嗎?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);
}
}
UPDATE檢索其記錄儀:現在,我創建了各地LogManager.GetLogger(類型)的裝飾.Logger和ThreadStatic IsDebugEnabled變量。這樣,兩個線程可以利用相同的工具類,一個將調試,另一個不會。這是有問題的,因爲它與調用的類和行號食堂......
public void Debug(object message)
{
if (_decorated.IsDebugEnabled && LoggerUtil.IsDebugEnabled)
{
_decorated.Log(typeof (MyLoggerDecorator), Level.Debug, message, null);
}
}
本機上,您無法通過線程禁用它。您可以在配置中爲每個記錄器設置規格。如果你知道你的多線程代碼總是使用1個記錄器(不共享),那麼你可以指定完全忽略該記錄器或不記錄調試。其他選項很難讓您看到代碼的結構。我能想到的唯一的其他選擇是在調用周圍創建自己的包裝器或攔截器,並添加掛起消息並根據線程ID或其他上下文恢復它們的功能。 – Igor
如果您有一個線程記錄器 - 通過將threadId添加到記錄器名稱 - 那麼您可以更改該特定appender的日誌級別。但是,您需要再次將其更改回來,因爲記錄器在threadId被重用時將被重用。 – stuartd