log4net でログレベル毎に出力先を指定する
現在のプロジェクトでは、log4net を使用してログを出力することになっていた。
ログファイル名は日付によって変わるが、その日のすべてのログが1つのファイルに出力される。
ある時、ログレベル毎に出力先のファイルを変更できれば便利じゃないか?と指摘された。
確かに、と思っていろいろ調べてみたが、どうも見つけられない。
それならば、と本家のサイトを見てみたらあっさり見つかった。
キーになるのは log4net.Filter.LevelRangeFilter というフィルタクラス。
こいつに出力したいログレベルの範囲を指定して、ログレベル毎にアペンダを設定してやればいい。
DEBUG・INFO・ERROR で出力ファイルを分けてみる。
ここにWindowsアプリのソースを置いておく。
このアプリでは、Form上のボタンを押すとログレベル別にログが出力される。
アプリケーション構成ファイルはこんな感じ。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="System.Configuration.IgnoreSectionHandler" /> </configSections> <log4net> <appender name="DebugAppender" type="log4net.Appender.FileAppender"> <param name="File" value="C:\log\Debug.log" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="DEBUG" /> <levelMax value="DEBUG" /> </filter> </appender> <appender name="InfoAppender" type="log4net.Appender.FileAppender"> <param name="File" value="C:\log\Info.log" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="INFO" /> <levelMax value="INFO" /> </filter> </appender> <appender name="ErrorAppender" type="log4net.Appender.FileAppender"> <param name="File" value="C:\log\Error.log" /> <param name="AppendToFile" value="true" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <levelMin value="ERROR" /> <levelMax value="ERROR" /> </filter> </appender> <root> <level value="DEBUG" /> <appender-ref ref="DebugAppender" /> <appender-ref ref="InfoAppender" /> <appender-ref ref="ErrorAppender" /> </root> </log4net> </configuration>