log4netの正しい使い方(ロガーの命名)

コード内でメッセージをログに記録する方法については、2 番目のアプローチを選択します。

ILog log = LogManager.GetLogger(typeof(Bar));
log.Info("message");

上記のログに送信されるメッセージは、完全修飾型 Bar を使用して「名前が付けられます」 、例

MyNamespace.Foo.Bar [INFO] message

このアプローチの利点は、ロギングを整理するためのデファクト スタンダードであり、名前空間でログ メッセージをフィルタリングできることです。たとえば、INFO レベルのメッセージをログに記録するが、Bar のログ レベルを上げるように指定できます。 特にDEBUG:

<log4net>
    <!-- appenders go here -->
    <root>
        <level value="INFO" />
        <appender-ref ref="myLogAppender" />
    </root>

    <logger name="MyNamespace.Foo.Bar">
        <level value="DEBUG" />
    </logger>
</log4net>

すべてのメッセージを単純に "myLog" に記録する場合、名前でログをフィルタリングする機能は log4net の強力な機能です。 、あなたはこの力の多くを失います!

EPiServer CMS に関しては、上記のアプローチを使用して、CMS と独自のコードに異なるログ レベルを指定できるはずです。

さらに読むために、ロギングについて書いた codeproject の記事を次に示します。

  • 伐採の技術

私の回答は遅くなるかもしれませんが、初心者には役立つと思います。以下のように変更しない限り、実行されたログは表示されません。

Log4net を実装する場合、2 つのファイルを変更する必要があります。

<オール>
  • log4net.dll の参照を追加 プロジェクトで。
  • app.config
  • クラス ログを実装するファイル
  • [app.config の内部] ] :

    まず、「configSections」の下に、以下のコードを追加する必要があります;

    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
    

    次に、「構成」ブロックの下に、以下のコードを記述する必要があります (このコードは私のニーズに合わせてカスタマイズされていますが、魅力的に機能します)。

    <log4net debug="true">
        <logger name="log">
          <level value="All"></level>
          <appender-ref ref="RollingLogFileAppender" />
        </logger>
    
        <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
          <file value="log.txt" />
          <appendToFile value="true" />
          <rollingStyle value="Composite" />
          <maxSizeRollBackups value="1" />
          <maximumFileSize value="1MB" />
          <staticLogFileName value="true" />
    
          <layout type="log4net.Layout.PatternLayout">
            <conversionPattern value="%date %C.%M [%line] %-5level - %message %newline %exception %newline" />
          </layout>
        </appender>
    </log4net>
    

    内部呼び出しクラス :

    この log4net を使用するクラス内で、以下のコードを宣言する必要があります。

     ILog log = LogManager.GetLogger("log");
    

    これで、同じクラス内のどこにいても通話履歴を取得できます。以下は、操作中に呼び出すことができるメソッドの 1 つです。

    log.Error("message");
    

    呼び出しクラスに名前を付ける代わりに、次のものを使い始めました:

    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    

    このようにして、log4net を使用するすべてのクラスで同じコード行を使用でき、コピーして貼り付けるときにコードを変更することを覚えておく必要がありません。または、ログ クラスを作成し、他のすべてのクラスにログ クラスを継承させることもできます。 .