0

アペンダーが無効になっているかどうかを判断することは可能ですか (つまり<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と、常に true が返されるためOff(基本的に、ロガーが無効になっていることが常に示されます)、機能しません。

4

2 に答える 2

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に設定して残すことができることです。

そうは言っても、それはあなたの選択です。あなたの質問に答えるために、理由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)

于 2012-09-06T10:24:39.820 に答える
0

log4net が基づいている log4j の私の理解に基づいて、次のように呼び出して、関心のあるレベルに LOGGER が構成されているかどうかを確認できます。

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

アペンダーが有効かどうかを示すものは何もありません。ただし、特定の名前付きアペンダーがロガーに割り当てられているかどうかを確認することはできます。あなたはチェックします:

if(logger.getAppender("MyAppender") == null)
于 2012-09-05T20:36:11.293 に答える