このサイト 言う
ロガーにはレベルを割り当てることができます。レベルは、log4net.Core.Levelクラスのインスタンスです。以下のレベルは、優先度の増加の順に定義されています。
- すべて
- デバッグ
- 情報
- 警告
- エラー
- 致命的
- OFF
DEBUGの優先順位は最も低く、ERRORは高くなっています。
質問
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="ERROR"/>
<param name="LevelMax" value="ERROR"/>
</filter>
最小および最大フィルターの代わり。ログを記録するために、レベルを構成し、その下にある他のすべてのレベルを含めることは可能ですか?.
例-レベルをエラーに設定すると、DEBUG、INFO、WARN、ERRORが含まれます。これはlog4netで可能ですか?
コメントの1つに基づいてlog4net構成を投稿する:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
</configSections >
<log4net debug="true">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender">
<layout type="log4net.Layout.XMLLayout" /> -->
<param name="File" value="TestLog.log" />
<param name="AppendToFile" value="false" />
<layout type="log4net.Layout.PatternLayout">
<header type="log4net.Util.PatternString" value="[START LOG] %newline" />
<footer type="log4net.Util.PatternString" value="[END LOG] %newline" />
<conversionPattern value="%d [%t] %-5p - %m%n" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<param name="LevelMin" value="DEBUG"/>
<param name="LevelMax" value="ERROR"/>
</filter>
</appender>
<root>
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</root>
<logger name="log4NetExample">
<!-- <appender-ref ref="B" /> -->
<level value="ALL" />
<appender-ref ref="LogFileAppender" />
</logger>
</log4net>
これは、ロガーにどのレベルで記録されるかを理解するのに役立つ場合があります。レベルは、log4net.Core.Levelクラスのインスタンスです。次のレベルは、重大度が高い順に定義されています-ログレベル。
設定レベルごとに記録されるレベルの数:
ALL DEBUG INFO WARN ERROR FATAL OFF
•All
•DEBUG •DEBUG
•INFO •INFO •INFO
•WARN •WARN •WARN •WARN
•ERROR •ERROR •ERROR •ERROR •ERROR
•FATAL •FATAL •FATAL •FATAL •FATAL •FATAL
•OFF •OFF •OFF •OFF •OFF •OFF •OFF
ほとんどのアプリケーションでは、最大レベルではなく、最小レベルを設定する必要があります。
たとえば、コードをデバッグするときは、最小レベルをDEBUGに設定し、本番環境ではWARNに設定します。
DEBUGはすべてのメッセージ、DEBUGメッセージ以外のすべての情報などを表示します。
通常、INFOまたはWARNを使用します。これは会社の方針に依存します。
他の人が指摘したように、通常、そのレベルとそれより厳しい他のレベルをログに記録するには、最小ログレベルを指定することが望ましいです。ロギングレベルについて逆向きに考えているようです。
ただし、個々のレベルのログをより詳細に制御したい場合は、次の構文を使用して、1つ以上の特定のレベルのみをログに記録するようにlog4netに指示できます。
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="WARN"/>
</filter>
または、フィルターに「拒否」ノードを追加して特定のログレベルを除外します。
複数のフィルターをスタックして、複数のレベルを指定できます。たとえば、WARNおよびFATALレベルのみが必要な場合。必要なレベルが連続している場合、LevelRangeFilterがより適切です。
参照ドキュメント: log4net.Filter.LevelMatchFilter
他の回答で十分な情報が得られない場合は、これがlog4netから必要なものを取得するのに役立つことを願っています。
すべてのlog4netレベルの優先順位を示すコードを次に示します。
TraceLevel(Level.All); //-2147483648
TraceLevel(Level.Verbose); // 10 000
TraceLevel(Level.Finest); // 10 000
TraceLevel(Level.Trace); // 20 000
TraceLevel(Level.Finer); // 20 000
TraceLevel(Level.Debug); // 30 000
TraceLevel(Level.Fine); // 30 000
TraceLevel(Level.Info); // 40 000
TraceLevel(Level.Notice); // 50 000
TraceLevel(Level.Warn); // 60 000
TraceLevel(Level.Error); // 70 000
TraceLevel(Level.Severe); // 80 000
TraceLevel(Level.Critical); // 90 000
TraceLevel(Level.Alert); // 100 000
TraceLevel(Level.Fatal); // 110 000
TraceLevel(Level.Emergency); // 120 000
TraceLevel(Level.Off); //2147483647
private static void TraceLevel(log4net.Core.Level level)
{
Debug.WriteLine("{0} = {1}", level, level.Value);
}
本当の公式ドキュメント( Apache log4net™マニュアル-はじめに )は、次のレベルがあると述べています...
...しかし、奇妙なことに、アセンブリlog4net.dll、v1.2.15.0シールドクラスlog4net.Core.Levelを表示すると、次のレベルが定義されています...
public static readonly Level Alert;
public static readonly Level All;
public static readonly Level Critical;
public static readonly Level Debug;
public static readonly Level Emergency;
public static readonly Level Error;
public static readonly Level Fatal;
public static readonly Level Fine;
public static readonly Level Finer;
public static readonly Level Finest;
public static readonly Level Info;
public static readonly Level Log4Net_Debug;
public static readonly Level Notice;
public static readonly Level Off;
public static readonly Level Severe;
public static readonly Level Trace;
public static readonly Level Verbose;
public static readonly Level Warn;
私は長い間、PostSharp OnBoundaryEntryおよびOnBoundaryExitと組み合わせてTRACEを使用しています。なぜこれらの他のレベルがドキュメントにないのだろうか。さらに、これらすべてのレベルの真の優先順位は何ですか?