コードだけでlog4netを使う

ログ出力のライブラリとしてlog4netやらNLogが人気があります。
紹介しているサイトを見るとすぐXMLの設定を書かせたがるのですが、後から変更するのか?と。

ということで、log4netをコードから設定する方法です。
ログをファイル出力します。

// 大体一つを使いまわすので static readonly で作る
// GetLogger内の文字列は好きなのでいい
public static readonly log4net.ILog logger = log4net.LogManager.GetLogger( "Log" );

// コンストラクタ的なところで設定を記述する
public App() {
  // 出力先のAppenderを作成します
  // ファイル出力で、日付やファイルサイズで新規ファイルを作成するタイプ
  var Appender = new log4net.Appender.RollingFileAppender() {
    // 出力するファイル名
    File = "log.log",
    // ファイル追記モード (Falseだと上書き)
    AppendToFile = true,
    // ログファイル名を固定にする
    StaticLogFileName = true,
    // ログファイル名のローテーション番号の順番
    CountDirection = 1,
    // ログファイルの最大世代
    MaxSizeRollBackups = 1,
    // 文字コード指定
    Encoding = System.Text.Encoding.UTF8,
    // ログを新規ファイルに切替える条件
    RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size,
    // 最大ファイルサイズ
    MaxFileSize = 3072000,
    //ログのフォーマット
    Layout = new log4net.Layout.PatternLayout(@"%d [%t] %-5p %type - %m%n"),
  };
  // 記述した設定を有効にする 忘れないように!
  Appender.ActivateOptions();

  var log = (log4net.Repository.Hierarchy.Logger)logger.Logger ;
  // 出力レベルの設定 デフォルトはALLなのでコメントアウトしちゃう
  //log.Level = log4net.Core.Level.All;
  // 出力先を追加します
  log.AddAppender( Appender );

  // 設定を有効にする 忘れないように!
  log.Hierarchy.Configured = true;
}

後は好きなところでメッセージ出力して下さい。

logger.Debug( "Debug" );
logger.Info( "Info" );
logger.Warn( "Warn" );
logger.Error( "Error" );
logger.Fatal( "Fatal" );

参考:
log4net の Appender を プログラム上で動的に 生成、追加 する 方法
c# - How to configure NHibernate logging with log4net in code, not in xml file? - Stack Overflow
Log4Net設定 MAXファイルサイズ及び日単位で切替え | Wait Cursor
Log4net(6) RollingFileAppender 意味不明パラメータ:CountDirection - shima111の日記