簡體   English   中英

如何檢查附加程序是否已禁用/啟用

[英]How to check if an appender is disabled/enabled

是否可以確定是否禁用了附加程序(即<level value="Off"> )?

我希望有一個全局標志來確定是否啟用了我的附加程序:

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標志非常重要,因為在禁用附加器時,由於我沒有構造所有這些字符串,這將節省大量CPU時間。 檢查追加器是否已關閉的最佳/最簡便方法是什么?

PS我已經嘗試過MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Off); ,但是,如果我將日志級別設置為“ Warn則它始終會為“ Off返回true(基本上,它總是表示記錄器已禁用),因此這是行不通的。

推薦的操作方式是,不要有一個全局標志來說明是否啟用了日志記錄,而是測試每個調用基礎上的實際日志記錄級別,例如

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,而無需在警告/調試和信息消息中構造所有字符串。

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

下一個級別是(AFAIK) log4net.Core.Level.Emergency因此可以進行檢查,但是由於該級別不常用,因此您還可以檢查log4net.Core.Level.Fatal

MyAppender.IsFatalEnabled只是MyAppender.Logger.IsEnabledFor(log4net.Core.Level.Fatal)的屬性包裝器,

根據我對log4net所基於的log4j的了解,您可以通過調用以下命令來檢查LOGGER是否配置為您感興趣的級別:

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

沒有任何信息可以告訴您是否啟用了附加程序。 但是,您可以檢查是否給定記錄器分配了給定的命名附加器。 您將檢查:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM