2013-03-27 54 views
2

我正在嘗試爲log4net編寫一些擴展方法,一個要求是用戶可以指定他想讓我的擴展日誌記錄消息的級別上。檢查是否設置了特定級別,如果是,請登錄該級別

現在我想能夠檢查是否在我的log4net記錄器中啓用了該級別。

我知道我可以檢查

ILog log = LogManager.GetLogger(....); 

if(log.IsDebugEnabled) 
{ 
    // log something 
} 

,但有什麼辦法,給予log4net.Core.Level變量,檢查水平是否被啓用與否?

所以我希望有可能是這樣的:

ILog log = LogManager.GetLogger(....); 
log4net.Core.Level myLevel = Level.Warn; 

if(log.IsLevelEnabled(myLevel)) 
{ 
    // log something 
    log.Log(myLevel, message); 
} 

有沒有辦法做到這一點?

解決方案:peer提到 - 藏在一個評論 - 如何做到這一點:

但是你可以得到記錄器實現:log.Logger.IsEnabledFor()...log.Logger.Log(...)可以幫助你的,Log功能不打算直接使用。

所以,現在我可以很容易地使用:

if(log.Logger.IsEnabledFor(myLevel)) 
{ 
    // log something 
} 

回答

2

您可以extention方法的ILog:

public static class Log4NetExtensionMethods 
{ 
    public static bool IsLevelEnabled(this ILog log, log4net.Core.Level level) 
    { 
     ... 
    } 

    public static void LogAtLevel(this ILog log, log4net.Core.Level level, string message) 
    { 
     ... 
    } 
} 
+0

嗯,是 - 當然我可以 - 我只是希望這樣的事情威力*已經*在log4net中可用.... – 2013-03-27 14:03:39

+0

你只有ILog接口https://logging.apache.org/log4net/release/sdk/log4net.ILogMembers.html,它來自你的LogManager,這是一個非常簡單的。沒有什麼可以幫助你在這個時間點。 – Peter 2013-03-27 14:05:47

+1

但是,您可以獲取logger的實現:log.Logger.IsEnabledFor()...而log.Logger.Log(...)可以幫助您,Log函數不打算直接使用。 – Peter 2013-03-27 14:11:09

相關問題