ログ出力はlog4netで

一昔前は

#if DEBUG
    Console.WriteLine("なんたらかんたら");
#endif

みたいにしてデバッグ用のログをはいてたりしましたが、
最近はみんな.NET開発でログ出力=log4net利用は当然の選択肢となっております。

log4net利用で一番の利点は後から出力レベル、出力先を簡単に制御できることです。
開発時は全てのメッセージをテキストへ出力
運用時はinfo,warnningレベルはテキストへ、Error以上はイベントログへ
など柔軟に対応ができます。

あとは5つある出力レベルをルールを決めて使い分けられれば
開発時のみならず運用・保守時に非常に有効に活用できます。

出力レベル(メソッド)は以下5つあります。
メソッドの名前そのままなのであえてルールとかいらないかもしれませんが、
チーム開発する場合など、折角ある機能をムダにしないように周知すべきかと
思います。
デバッグのことだけ考えてなんでもdebugで出力されると運用時に困ったりします。


debug:デバッグ用なので開発用のメッセージのみを含み、運用時は有事の際以外は出力しない。
--これ以降は運用時に出力する想定でムダなものや間違っても顧客情報、パスワードなど出力しない--
info:開始、終了、処理件数みたいな正常時に出力する最低限の内容のみを出力。テキストでサイズ上限つけて出力するくらい?多分誰もみない。
warn:これが一番悩む。使わないって選択肢もある。
error:このへんからはイベントログへ出力してもいいかも。zabbixみたいな外部の監視ソフトで監視するケースもありうる。
fatal:システム運用上致命的なものはこれ。機能によっては担当者へメール通知レベル。ってすると開発者はだれも使わないかも。




以下はよく忘れる自分への備忘のためのメモ

                                                                  • -

log4net.dllを参照設定する
・利用するためのおまじない(とりあえずclassの先頭あたりにいれとこう)

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

・出力したい場所で

 log4.debug("エラーだよ");

・AssemblyInfo.csに以下追記

 [assembly: log4net.Config.XmlConfigurator(Watch=true)]

・app.config内で出力先とかの設定(おこのみで変えましょう)

  <configSections>
    <section name="log4net" type=" log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>
  <log4net>
    <appender name="RollingLogFileAppender" type="log4net.Appender.RollingFileAppender,log4net">
      <param name="File" value="App_Data/log4net/logfile.txt"/>
      <param name="AppendToFile" value="true"/>
      <param name="MaxSizeRollBackups" value="100"/>
      <param name="MaximumFileSize" value="1024000"/>
      <param name="RollingStyle" value="Size"/>
      <param name="StaticLogFileName" value="true"/>
      <Encoding value="UTF-8"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger %message%newline" />
      </layout>
    </appender>
    <root>
      <level value="ALL" />
      <appender-ref ref="RollingLogFileAppender" />
    </root>
  </log4net>
                                                                  • -