参考リンク: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 章を参照してください。