[log4net] ログをファイルに出力する ~日付とサイズでログファイルを分ける~

上記の記事で、ファイルサイズでログを分ける方法と日付でログのバックアップを取る方法について説明しました。
今回は上記2つをミックスしてログを作成する方法について説明します。

Appender は上記2つの記事同様 log4net.Appender.RollingFileAppender を使用します。

App.configの例を以下に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <!-- 日付とサイズでRollingするファイルAppenderの例 -->
    <appender name="DaySizeRollingLogToFile" type="log4net.Appender.RollingFileAppender">
      <!-- ログ・ファイル名 -->
      <File value="C:\Work\MyLog.log" />
      <!-- 追加書き込み -->
      <appendToFile value="true" />
      <!-- 日付ごとにファイルを作成することを指定 -->
      <rollingStyle value="Composite" />
      <!-- ログ・ファイル名を固定にするため“true”を指定 -->
      <staticLogFileName value="true" />
      <!-- ファイルサイズの上限 -->
      <maximumFileSize value="10KB" />
      <!-- 最大バックアップファイル数 -->
      <maxSizeRollBackups value="5" />
      
      <!-- ファイル名の日付部分 -->
      <datePattern value='"."yyyyMMdd".log"' />

      <layout type="log4net.Layout.PatternLayout">
        <!-- ログの書式 -->
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>

    
    <root>
      <!-- すべてのログを出力したい場合 -->
      
      <level value="All" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="DaySizeRollingLogToFile" />
    </root>
  </log4net>
</configuration>

今回のキモは、<rollingStyle>タグのvalueタグに Composite を指定しているところです(15行目)。
これにより、ログファイルは指定したファイルサイズを超えるとバックアップを取って新しくログファイルを作成します。
また、日付が変わってログが出力されるときも新しくログファイルが作成されるようになります。

<rollingStyle>以外のタグについては、冒頭で示した2つの記事で解説済みですので参考にしてください。

今回の設定によるログファイルの作成例を以下に示します。

実行例

[log4net] ログをファイルに出力する ~日付でバックアップを取る~

Appender に log4net.Appender.RollingFileAppender を使用すると、ファイルにログを出力することができます(これは前回と同じです)。また、日付ごとにバックアップとを取ってログを作成することが可能です。

App.configの例を以下に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <!-- 日付でRollingするファイルAppenderの例 -->
    <appender name="DayRollingLogToFile" type="log4net.Appender.RollingFileAppender">
      <!-- ログ・ファイル名の先頭部分 -->
      <File value="C:\Work\MyLog" />
      <!-- 追加書き込み -->
      <appendToFile value="true" />
      <!-- 日付ごとにファイルを作成することを指定 -->
      <rollingStyle value="date" />
      <!-- ログ・ファイル名が固定ではないのため“false”を指定 -->
      <staticLogFileName value="false" />
      <!-- ファイル名の日付部分 -->
      <datePattern value='"."yyyyMMdd".log"' />

      <layout type="log4net.Layout.PatternLayout">
        <!-- ログの書式 -->
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>

    <root>
      <!-- すべてのログを出力したい場合 -->
      
      <level value="All" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="DayRollingLogToFile" />
    </root>
  </log4net>
</configuration>

App.config 設定の説明
まず、ファイルにログを出力するために、Appenderのtype(9行目)には log4net.Appender.FileAppender を指定します。

作成するファイルは <file>タグの value 属性に 出力先のログファイルのパスを指定します(11行目)。今回は日付ごとにバックアップを取るのでファイル名の先頭までをvalueに設定しておきます。

ログを追加書き込みする場合は <appendToFile>タグの value属性に”AppendToFile” を指定します(13行目)。

日付ごとにファイルを作成するために<rollingStyle>タグの value属性に”date”を指定します(15行目)。

また、ログファイル名に日付を入れることによってファイル名が固定ではなくなるため、<staticLogFileName>タグのvalue属性に false を指定します(17行目)。

ファイル名の日付部分は<datePattern>タグのvalue属性に指定します(19行目)。

上記の設定を利用してログを作成した実行結果例は以下の通りです。

実行結果例

[log4net] ログをファイルに出力する ~ファイルサイズでログを分ける~

Appender にlog4net.Appender.RollingFileAppenderを使用すると、ファイルにログを出力することができます。また、指定したファイルサイズを超えたときに新しいログファイルを作成することが可能です。

App.configの例を以下に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>

    <appender name="SizeRollingLogToFile" type="log4net.Appender.RollingFileAppender">
      <!-- 作成するログファイル -->
      <file value="C:\Work\MyLog.log" />
      <!-- 追加で書き込みをする -->
      <appendToFile value="true" />
      <!-- ファイルサイズで Rollong -->
      <rollingStyle value="Size" />
      <!-- 最大バックアップファイル数 -->
      <maxSizeRollBackups value="5" />
      <!-- ファイルサイズの上限 -->
      <maximumFileSize value="1MB" />
      
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>

    <root>
      <!-- すべてのログを出力したい場合 -->
      
      <level value="All" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="SizeRollingLogToFile" />
    </root>
  </log4net>
</configuration>

App.config 設定の説明
まず、ファイルにログを出力するために、Appenderのtype(9行目)には log4net.Appender.FileAppender を指定します。

作成するファイルは <file>タグの value 属性に 出力先のログファイルのパスを指定します(11行目)。

ログを追加書き込みする場合は <appendToFile>タグの value属性に”AppendToFile” を指定します(13行目)。

今回、ファイルサイズに上限を持たせてログを作成するため、<rollingStyle>タグのvalue属性にtrueを指定します(15行目)。

ファイルサイズが上限を超えるとバックアップを取って新しくログが作成されます。このときいくつまでバックアップを残すかを決めるには、<maxSizeRollBackups>のvaluse属性で設定します(17行目)。

ファイルサイズの上限は<maximumFileSize>タグのvalue属性で設定します。1MBのように指定することができます(19行目)。

上記の設定を利用してログを作成した実行結果例は以下の通りです。

実行結果例

[log4net] ログをファイルに出力する

Appender に log4net.Appender.FileAppender を使用すると、ファイルにログを出力することができます。

App.configの例を以下に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <!-- ファイルを使用するAppenderの例 -->
    <appender name="LogToFile" type="log4net.Appender.FileAppender" >
      <!-- 作成するログファイル -->
      <file value="C:\Work\MyLog.log" />
      <!-- 追加で書き込みをする -->
      <appendToFile value="true" />
      <!-- ログの書式 -->
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>

    <root>
      <!-- すべてのログを出力したい場合 -->
      <level value="All" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="LogToFile" />
    </root>
  </log4net>
</configuration>

App.configの例


App.config 設定の説明
まず、ファイルにログを出力するために、Appenderのtype(9行目)には log4net.Appender.FileAppender を指定します。

作成するファイルは <file>タグの value 属性に 出力先のログファイルのパスを指定します(11行目)。

ログを追加書き込みする場合は <appendToFile>タグの value属性に”AppendToFile” を指定します(13行目)。

あとはログを出力するコードを記述するのみです。

以下ログ出力のコード例です(再掲)。
VBの例

Imports log4net

Private log As ILog = LogManager.GetLogger( _
    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

Sub Main()
    log.Fatal("Fatal")
    log.Error("Error")
    log.Warn("Warn")
    log.Info("Info")
    log.Debug("Debug")

    Console.ReadLine()
End Sub

C#の例

using log4net;
class Program
{
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    static void Main(string[] args)
    {
        log.Fatal("Fatal");
        log.Error("Error");
        log.Warn("Warn");
        log.Info("Info");
        log.Debug("Debug");                        

        Console.ReadLine();
    }
}

実行例は以下の通りです。

実行例

[log4net] コンソールに色づけされたログを出力する

Appender に log4net.Appender.ColoredConsoleAppender を使用すると、コンソールに出力するログに色を付けることができます。

App.configの例を以下に示します。

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net" />
  </configSections>

  <log4net>
    <!-- コンソールに色づけされたログを出力するAppenderの設定例 -->
    <appender name="ColoredConsole"  type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="FATAL" />
        <foreColor value="White" />
        <backColor value="Red" />
      </mapping>
      <mapping>
        <level value="ERROR" />
        <foreColor value="White" />
        <backColor value="Purple" />
      </mapping>
      <mapping>
        <level value="WARN" />
        <foreColor value="Purple" />
        <backColor value="White" />
      </mapping>
      <mapping>
        <level value="INFO" />
        <foreColor value="White" />
        <backColor value="Blue" />
      </mapping>
      <mapping>
        <level value="DEBUG" />
        <foreColor value="White" />
        <backColor value="Green" />
      </mapping>
      
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>
    
    <root>
      <!-- すべてのログを出力したい場合 -->
      <level value="All" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="ColoredConsole" />
    </root>
  </log4net>
</configuration>

App.config 設定の説明
まず、色づけされたログを出力するために、Appenderのtypeには log4net.Appender.ColoredConsoleAppender を指定します。
次に色づけですが、レベルごと(Fatal, Error, Warn Info, Debug)ごとに指定することができます。
色の設定はタグの中で行います。
タグにはログのレベルを、タグには前景色を、タグには背景色を指定します。

使用可能な色は以下のように決まっています。

  • Blue
  • Green
  • Red
  • White
  • Yellow
  • Purple
  • Cyan
  • HighIntensity

HighIntensityは色を濃くしたい(通常は淡い?感じの色になります)場合に使用します。

HighIntensityを使用する場合は以下のように記述します。

<mapping>
	<level value="DEBUG" />
	<foreColor value="White" />
	<backColor value="Green, HighIntensity" />
</mapping>

前回使用したコード例を使用して(以下に再掲)実行してみます。
VBの例

Imports log4net

Private log As ILog = LogManager.GetLogger( _
    System.Reflection.MethodBase.GetCurrentMethod().DeclaringType)

Sub Main()
    log.Fatal("Fatal")
    log.Error("Error")
    log.Warn("Warn")
    log.Info("Info")
    log.Debug("Debug")

    Console.ReadLine()
End Sub

C#の例

using log4net;
class Program
{
    private static readonly ILog log = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
    static void Main(string[] args)
    {
        log.Fatal("Fatal");
        log.Error("Error");
        log.Warn("Warn");
        log.Info("Info");
        log.Debug("Debug");                        

        Console.ReadLine();
    }
}

実行例は以下の通りです。

色づけされたログの出力例

 

ちなみに、HighIntensity を使用すると以下のように色が濃くなります。

HighIntensity を使用した例