アットウィキロゴ

ログ出力

TraceSource

.net2.0から導入されたトレーサー機能。ログというかLog4netみたいにいろんな出力実装クラス(*Listener)を連結して使用する。

使ってみたがかなりショボイくて使えるケースが限定される。
  • TextWriterTraceListener
肝心のテキスト系ログはまったく使えなさそう。まずRollingFileAppenderのようなサイクリック機能が内容で、デバッグにしか使えなさそう。一般向けには無理。
FileLogTraceListenerも似た様なファイル出力系で、最大サイズや出力単位(日毎等)を指定できるが、これでも弱い。
テキストログはlog4netあたりが無難か?
  • ConsoleTraceListener
stdout。デバッグ目的に近いもので、それなら使えるなぁという程度。log4netを組み込んだら不要だが、構築作業いらずで扱えるので幾分便利。
でもstdoutだけじゃ本番で使う際に力不足名ケースが多いので
  • EventLogTraceListener
これは使える。直接EventLogやるより、レベル制御等が抽象的にかけられるし、既に組み込み済みなので便利。

全体的に見れば、能力不足な感じがする。特にテキスト出力が弱いのは致命的で、だったら別のログフレームワークを用意する事になるし、他のフレームワークでテキスト以外の機能が無いって事はありえないので、結局不要かな~と感じる。
標準で使えるのはお手軽なので悔しいな。

log4net

log4jの.net実装。logbackとかは無いみたい。


app.configでlog4net.configを兼ねるには


当然だが、app.config内にlog4netのセッティングを書ける。つまりweb.configも同様。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
 <configSections>
   <sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
       <section name="meta_switch.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
   </sectionGroup>
   <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
 </configSections>
 <log4net>
   <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender">
     <param name="File" value="${TMP}\Log4netSample" />
     <param name="AppendToFile" value="true" />
     <param name="RollingStyle" value="size" />
     <param name="MaxSizeRollBackups" value="3" />
     <param name="MaximumFileSize" value="1KB" />
     <param name="StaticLogFileName" value="false" />
     <layout type="log4net.Layout.PatternLayout">
       <conversionPattern value="%date [%thread] %-5level %logger - %message%newline" />
     </layout>
   </appender>
   <root>
     <level value="ALL" />
     <appender-ref ref="RollingLogFileAppender" />
   </root>
 </log4net>
</configuration>

ポイントは<configSections>にlog4netを指定しないと、後述の<log4net>が読めなくて例外が飛ぶ。

あとはasseblyinfoにlog4netのコンフィグを解析できるように設定を入れればOK。
[assembly: log4net.Config.XmlConfigurator(Watch = true)]
最終更新:2008年11月06日 17:09