2012-09-05 32 views
0

是否可以確定appender是否被禁用(即<level value="Off">)?如何檢查appender是否被禁用/啓用

我想有決定如果我的附加目的地啓用全局標誌:

public static bool isAppenderEnabled = /*...*/; 

如果附加器被啓用,那麼我會記錄的東西:

if(isAppenderEnabled) 
{ 
    MyAppender.Warn("****************************************"); 
    MyAppender.Warn("Warning title!"); 
    MyAppender.Warn(String.Format("Some warning message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
    MyAppender.Warn("****************************************"); 
} 

重要的是要具有isAppenderEnabled標誌,因爲當appender被禁用時,由於我沒有構造所有這些字符串,因此我將節省大量的CPU時間。檢查appender是否關閉的最佳/最簡單的方法是什麼?

P.S. 我試過MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off);,但是,如果我將日誌級別設置爲Warn,它總是爲Off返回true(基本上,它總是說記錄器被禁用),所以這是行不通的。

+0

[可其對你有用的,因爲這是你檢查的simmilar問題的答案] [1] [1]:http://stackoverflow.com/a/10126517/1003016 –

回答

1

做的是推薦的方式,是不是有一個全球性的標誌,以表示日誌是否啓用,而是測試的,按每個呼叫, 如

實際的日誌記錄級別
if (MyAppender.IsWarnEnabled) 
{ 
    MyAppender.Warn(String.Format("Some warning message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
} 

...

if (MyAppender.IsDebugEnabled) 
{ 
    MyAppender.Debug(String.Format("Some debug info! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
} 

...

if (MyAppender.IsErrorsEnabled) 
{ 
    MyAppender.Error(String.Format("Some error message! A:{0}, B:{1}, C:{2}, D:{3}", 0, 1, 2, 3)); 
} 

這種方法的優點是,您可以設置並保持日誌記錄爲Level.Error或Level.Fatal,而無需在warn/debug和info消息中構建所有字符串。

話雖如此,它是您的選擇。若要回答您的問題,MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off); 不起作用的原因是,如果級別設置爲x 或更高,則MyAppender.Logger.IsEnabledFor(x)將返回true。因此,我希望這個調用總是返回true。

下一級是(據我所知)log4net.Core.Level.Emergency這樣可以檢查是否存在,而是作爲水平不常用的,你也可以檢查log4net.Core.Level.Fatal

MyAppender.IsFatalEnabled只是爲MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Fatal)一個屬性包裝,

0

根據我的log4j的理解這log4net的是基於,您可以檢查記錄器的配置,你有興趣在通過調用級別:

logger.isEnabledFor(Priority.WARN) // or whatever log priority you want 

沒有任何告知用戶,如果appender已啓用。但是,您可以檢查是否給定的指定appender分配給您的記錄器。你會檢查:

if(logger.getAppender("MyAppender") == null) 
+0

我試過' IsEnabledFor',但這是限制並且在我們處理多個日誌級別時不是非常健壯。 – Kiril