Common.Logging と log4net を用いたプロジェクトログフレームワークの構築

参考リンク:https://www.cnblogs.com/heys/p/5787123.html
Common.Logging は汎用的なログインターフェースを提供し、log4net はその強力な実装です。そのほかにも EntLib のログや NLog などの異なる実装を使用することも可能です。
Common.Logging は、配置を変更するだけで異なるログ実装を切り替えることができ、コードを一切変更する必要はありません。
.NET プロジェクトでの Common.Logging 使用方法:
1. 必要なアセンblr を追加:
  • Common.Logging.dll
  • Common.Logging.Core.dll
  • Common.Logging.log4net1215.dll
  • log4net.dll
特に注意が必要なのは、Common.Logging.log4net1215.dll と log4net.dll のバージョンが一致することです。Visual Studio の NuGet を使用して追加する事をお勧めします。
2. 設定ファイルを作成
次の例は、ログ設定を外部ファイルに配置する場合の設定です:
<?xml version="1.0" encoding="utf-8" ?>
<factoryAdapter>
    <arg key="configType" value="FILE-WATCH" />
    <arg key="configFile" value="~/Config/Log4Net.xml" />
    <arg key="shareLogFile" value="true" />
    <arg key="regenerateConfigFile" value="false" />
    <arg key="Level" value="4" />
</factoryAdapter>

<sectionGroup name="common">
    <section name="logging" type="Common.Logging.ConfigurationSectionHandler, Common.Logging" />
</sectionGroup>

<common>
    <logging>
      <factoryAdapter type="M2SH.Common.Utilities.Logs.EHLog4NetLoggerFactoryAdapter, M2SH.Common">
        <arg key="configType" value="FILE-WATCH" />
        <arg key="configFile" value="~/Config/Log4Net.xml" />
        <arg key="regenerateConfigFile" value="true" />
        <arg key="Level" value="4" />
      </factoryAdapter>
    </logging>
</common>
上記の設定では、log4net の設定を別ファイルに配置しています。
log4net.config ファイルの例:
<?xml version="1.0" encoding="utf-8" ?>
<log4net debug="false">

  <appender name="AspNetTraceAppender" type="log4net.Appender.AspNetTraceAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="[%thread] %-5level - %message" />
    </layout>
  </appender>

  <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender">
    <file>Logs/{0}/Sys/sys</file>
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd.'log'" />
    <maxSizeRollBackups value="2" />
    <maximumFileSize value="5M" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%date |[%thread] |%-5level |%logger |%message%newline" />
    </layout>
  </appender>

  <appender name="RollingFileAppenderBiz" type="log4net.Appender.RollingFileAppender">
    <file>Logs/{0}/Biz/biz</file>
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd.'log'" />
    <maxSizeRollBackups value="2" />
    <maximumFileSize value="5M" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="!!! %date |[%thread] |%-5level |%message%newline" />
    </layout>
  </appender>

  <appender name="RollingFileAppenderNetReq" type="log4net.Appender.RollingFileAppender">
    <file>Logs/{0}/NetReq/netreq</file>
    <appendToFile value="true" />
    <rollingStyle value="Date" />
    <datePattern value="yyyy-MM-dd.'log'" />
    <maxSizeRollBackups value="2" />
    <maximumFileSize value="5M" />
    <staticLogFileName value="false" />
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="!!! %date |[%thread] |%-5level |%message%newline" />
    </layout>
  </appender>
  
  <appender name="TraceAppender" type="log4net.Appender.TraceAppender">
    <layout type="log4net.Layout.PatternLayout">
      <conversionPattern value="%-5level %M - %message%newline" />
    </layout>
  </appender>

  <appender name="MemoryAppender" type="log4net.Appender.MemoryAppender">
    <!-- simple appender to get results to UI -->
  </appender>

  <root>
    <level value="DEBUG" />
    <appender-ref ref="TraceAppender" />
    <appender-ref ref="RollingFileAppender" />
  </root>
  <logger name="BizLogger" additivity="false">
    <level value="Info" />
    <appender-ref ref="RollingFileAppenderBiz" />
  </logger>

  <logger name="NetReqLogger" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="RollingFileAppenderNetReq" />
  </logger>
</log4net>
上記の設定ファイルでは、AspNetTraceAppender、RollingFileAppender、RollingFileAppenderBiz、RollingFileAppenderNetReq、TraceAppender、MemoryAppender の6つのレコードラーが定義されています。
root レコードラーはグローバルなログ出力用に設定され、log4net では1つのみを許可しています:
<root>
    <level value="DEBUG" />
    <appender-ref ref="TraceAppender" />
    <appender-ref ref="RollingFileAppender" />
</root>
追加の logger (注:appender を指定した logger のみがログを出力します):
<logger name="BizLogger" additivity="false">
    <level value="Info" />
    <appender-ref ref="RollingFileAppenderBiz" />
</logger>

<logger name="NetReqLogger" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="RollingFileAppenderNetReq" />
</logger>
追加ラーの配置要点:
  • name 属性:レコードラーの名前を指定し、呼び出し時に使用します。
  • type 属性:レコードラーの実装クラスを指定します。
  • 詳細な追加ラーの種類は、公式ドキュメントの appender 章を参照してください。

タグ: Common.Logging log4net 日志管理 ASP.NET .NET

10月9日 22:35 投稿