[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 を使用した例

[log4net] ログを出力する

前回、ログ出力の設定を行いました。
今回は、実際にログを出力する方法について説明します。

log4netでログを出力するにはLogManagerクラスを使用します。
また、ログを出力するには、ログレベルに合わせたメソッドを使用します。
ログ出力に使用するメソッドは以下の通りです。引数にはログとして出力するメッセージを記述します。

メソッド 説明
Fatal システムを停止するような致命的なエラーログの出力
Error システム停止までいかないが、問題となるエラーログの出力
Warn 注意や警告ログを出力
Info 操作ログを出力
Debug 開発用デバッグ情報を出力

コード例は以下の通りです。

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();
    }
}

実行結果は以下の通りです。
ログの出力設定で、ログレベルをWarnにしているので、Fatal, Error, Warnの3つのログが出力されています。

実行例

[log4net] log4netの設定

log4netを使用してログを出力するには、設定を作成する必要があります。

設定は、プロジェクトファイルのApp.config に組み込むか、任意のXMLファイルを準備するかのどちらかとなります。


設定値の保存場所を設定する

log4netは最初にAssemblyInfovb(C#の場合はAssemblyInfo.cs)を参照し、ログ出力に必要な設定値が保存されている場所を読み取ります。
設定値の保存場所は、App.configまたは任意のXMLファイルを指定することが可能です。
AssemblyInfo.vb(C#はAssemblyInfo.cs)の最終行に以下のコードを追加します。

VB.NETのAssemblyInfo.vbへの追記(App.configを使用する場合)

<Assembly: log4net.Config.XmlConfigurator(Watch:=True)>

VB.NETのAssemblyInfo.vbへの追記(任意のXMLファイルを使用する場合)

<Assembly: log4net.Config.XmlConfigurator(Watch:=True, ConfigFile:="XMLファイルのパス")>

C#のAssemblyInfo.csへの追記(App.configを使用する場合)

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

C#のAssemblyInfo.csへの追記(任意のXMLファイルを使用する場合)

[assembly: log4net.Config.XmlConfigurator(Watch=true, ConfigFile="XMLファイルのパス")]

 


設定を作成する
設定ファイルには、ログをどのように出力するかを記述します。

最初に、App.configにある~を以下のように編集し、log4netの設定を セクションに書くことを宣言しておきます。

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

次に、ログの出力形態(どこに出力するか)を記述します。
ログの出力形態は、下表のように複数の種類があり、アペンダと呼ばれるログ出力用クラスを指定して設定します。
(代表的なもののみを掲載しています。詳しくは、http://logging.apache.org/log4net/release/config-examples.html を参照ください)

アペンダ 出力形態
log4net.Appender.AdoNetAppender データベース(ADO.NETを使用)
log4net.Appender.ConsoleAppender コンソール
log4net.Appender.ColoredConsoleAppender コンソール(エラーレベルごとに色を指定できる)
log4net.Appender.EventLogAppender イベント・ログ
log4net.Appender.FileAppender ファイル
log4net.Appender.NetSendAppender NetSendコマンドで、Windowsユーザーへ送付
log4net.Appender.RollingFileAppender ファイル(ファイルの最大値で、ログファイルを分割出力)
log4net.Appender.SmtpAppender メール
log4net.Appender.TraceAppender トレース情報として生成

アペンダは、App.configのセクション内のセクションに記述します(複数記述することも可能です)。

コンソールにログを出力する例でみてみましょう。
のname属性には任意の名前を記述します。
type属性には上記表のログ出力クラス(ここではlog4net.Config.Log4NetConfigurationSectionHandler,log4net)を指定します。
はログの出力書式を設定するセクションです。
のvalue属性に、ログの出力書式を記述します。

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

  <log4net>
    <!-- コンソールにログを出力する設定の例 -->
    <appender name="LogToConsole" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>
  </log4net>
</configuration>

 


ログの出力書式
のvalue属性で指定できる代表的な値には以下のようなものがあります。
(そのほかの値については http://logging.apache.org/log4net/release/sdk/log4net.Layout.PatternLayout.html を参照ください)

説明
%d ログ日時の出力
%L 行番号の出力
%m メッセージを出力
%n 改行文字の出力
%p ログレベルの出力
%t ログを生成したスレッドの出力
%M ログを出力したメソッド名
%logger ログクラスのGetLoggerメソッドの引数に渡した値

 


ログレベルの設定
出力するログは、ログレベルを設定することができます。
ログレベルには、下表のものがあります。

レベル 説明
Fatal システムを停止するような致命的なエラー
Error システム停止までいかないが、問題となるエラー
Warn 注意や警告
Info 操作ログ情報
Debug 開発用デバッグ情報

ログレベルを設定すると、指定したログレベルより上のものが出力されます。
たとえば、ログレベルに Warnを指定した場合には、表のWarn以上のログのみ(Warn, Error, Fatalの3種類)出力します。
また、レベルには All と OFFというものもあり、 Allを指定した場合には、すべてのレベルのログを出力します。Offを指定した場合には一切ログを出力しません。

ログレベルは セクションのセクション内に記述します。

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

  <log4net>
    <!-- コンソールにログを出力する設定の例 -->
    <appender name="LogToConsole" type="log4net.Appender.ConsoleAppender">
        :省略
    </appender>
    
    <root>
      <!-- 警告以上のログを出力したい場合 -->
      <level value="Warn" />
    </root>
  </log4net>
</configuration>

 


使用するアペンダーの設定
最後に、どのアペンダを使用するかを指定する必要があります。
使用するアペンダは、先ほどのセクション内に記述します。
ref属性には、アペンダに付けた名前を指定します。

<root>
  <!-- 警告以上のログを出力したい場合 -->
  <level value="Warn" />
  <!-- 使用するアペンダを設定 -->
  <appender-ref ref="LogToConsole" />
</root>

上記をまとめた App.configの例を以下に記します。

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

  <log4net>
    <!-- コンソールを使用するAppenderの例 -->
    <appender name="LogToConsole" type="log4net.Appender.ConsoleAppender">
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%d[%t] %p - %m%n"/>
      </layout>
    </appender>

    <root>
      <!-- 警告以上のログを出力したい場合 -->
      <level value="Warn" />
      <!-- どのログ出力先を使用するか -->
      <appender-ref ref="LogToConsole" />
    </root>
  </log4net>
</configuration>