web-dev-qa-db-ja.com

log4netの階層とログレベル

このサイト 言う

ロガーにはレベルを割り当てることができます。レベルは、log4net.Core.Levelクラスのインスタンスです。以下のレベルは、優先度の増加の順に定義されています。

  • すべて
  • デバッグ
  • 情報
  • 警告
  • エラー
  • 致命的
  • OFF

DEBUGの優先順位は最も低く、ERRORは高くなっています。

質問

  • 最小値と最大値の例DEBUGおよびERRORを設定すると、すべてのDEBUG、INFO、WARNおよびERRORが出力されます。最小および最大フィルターを使用しません。 ERROR(ロギングレベル= ERROR)を指定した場合、DEBUG、INFO&WARNが含まれますか
 <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>
110
Siva

これは、ロガーにどのレベルで記録されるかを理解するのに役立つ場合があります。レベルは、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
68
Mel Pama

ほとんどのアプリケーションでは、最大レベルではなく、最小レベルを設定する必要があります。

たとえば、コードをデバッグするときは、最小レベルをDEBUGに設定し、本番環境ではWARNに設定します。

34
Ilya Kogan

DEBUGはすべてのメッセージ、DEBUGメッセージ以外のすべての情報などを表示します。
通常、INFOまたはWARNを使用します。これは会社の方針に依存します。

19
weismat

他の人が指摘したように、通常、そのレベルとそれより厳しい他のレベルをログに記録するには、最小ログレベルを指定することが望ましいです。ロギングレベルについて逆向きに考えているようです。

ただし、個々のレベルのログをより詳細に制御したい場合は、次の構文を使用して、1つ以上の特定のレベルのみをログに記録するようにlog4netに指示できます。

<filter type="log4net.Filter.LevelMatchFilter">
  <levelToMatch value="WARN"/>
</filter>

または、フィルターに「拒否」ノードを追加して特定のログレベルを除外します。

複数のフィルターをスタックして、複数のレベルを指定できます。たとえば、WARNおよびFATALレベルのみが必要な場合。必要なレベルが連続している場合、LevelRangeFilterがより適切です。

参照ドキュメント: log4net.Filter.LevelMatchFilter

他の回答で十分な情報が得られない場合は、これがlog4netから必要なものを取得するのに役立つことを願っています。

10
ulty4life

すべての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);
}

ここに画像の説明を入力

9

本当の公式ドキュメント( Apache log4net™マニュアル-はじめに )は、次のレベルがあると述べています...

  • すべて
  • デバッグ
  • 情報
  • 警告
  • エラー
  • 致命的
  • OFF

...しかし、奇妙なことに、アセンブリ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を使用しています。なぜこれらの他のレベルがドキュメントにないのだろうか。さらに、これらすべてのレベルの真の優先順位は何ですか?

8
barrypicker