簡體   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