Kamuycikap - SentenceDataBase

日々の勉強の記録を気分で書き綴るブログ

C#でログを残したい時の方法「log4netを使ってみる」

C#log4netライブラリを使うときの導入方法

log4netを利用すると、柔軟な書式でログを残すことが出来るようになります。
自分用のメモな勢いで殴り書き。

手順

  1. log4netのダウンロード
  2. AssemblyInfo.csに設定を追記
  3. 設定XMLファイル作成
  4. log4net.dllを実際のファイルパスに配置
  5. log4net.dllをソリューションエクスプローラーにセット
  6. 参照設定に追加
  7. 対象のフレームワーク設定
  8. 設定XMLファイルを常にコピー
  9. log4net.dllを常にコピー
  10. 導入したいクラスにプロパティを記述
  11. ログを出力

log4netのダウンロード

公式サイトからlog4net.dllをダウンロード
http://logging.apache.org/log4net/download_log4net.cgi

AssemblyInfo.csに設定を追記

ソリューションエクスプローラーの「Properties」にAssemblyInfo.csがあるのでダブルクリックで開く。
一番下に追加

//log4net
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config", Watch = true)]

設定XMLファイル作成

ソリューションエクスプローラーの右クリックメニューから「Add」して作成。(テキストファイル)
ファイル名は上記の設定にある「log4net.config」として作成。
公式サイト見ながら設定した。
以下、サンプル

<?xml version="1.0" encoding="UTF-8" ?>
<!-- [log4net.config] -->
<configuration>

  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
  </configSections>

  <appSettings>
    <!-- log4net 内部のデバッグメッセージを出力 -->
    <add key="log4net.Internal.Debug" value="true" />
  </appSettings>

  <log4net>

    <!-- ファイル出力用 -->
    <appender name="DailyFileAppender" type="log4net.Appender.RollingFileAppender">

      <!-- ログファイルの切替 { サイズ: Size, 日付: Date } -->
      <param name="RollingStyle" value="Date" />

      <!-- ファイル名 -->
      <param name="File" value=".\logs\hogehoge.log" />

      <!-- ファイル書き込み { 追記: true, 上書き: false } -->
      <param name="AppendToFile" value="true" />

      <param name="MaxSizeRollBackups" value="10" />
      <param name="MaximumFileSize" value="1000KB" />

      <!-- 出力文字列のフォーマット -->
      <layout type="log4net.Layout.PatternLayout">
        <header type="log4net.Util.PatternString" value='[task time="%date{HH:mm:ss,fff}"]%newline' />
        <footer type="log4net.Util.PatternString" value="[/task]%newline" />
        <conversionPattern value="%-5level %date{yyyy/MM/dd_HH:mm:ss,fff} [%thread]] - %message%newline" />
      </layout>

      <!-- 出力するログ レベルのフィルタ -->
      <filter type="log4net.Filter.LevelRangeFilter">
        <levelMin value="INFO" />
        <levelMax value="FATAL" />
      </filter>

    </appender>

    <appender name="DebugAppender" type="Foo.Bar.Utility.DebugAppender">

      <!-- 出力文字列のフォーマット -->
      <layout type="log4net.Layout.PatternLayout">
        <header type="log4net.Util.PatternString" value='[task time="%date{HH:mm:ss,fff}"]%newline' />
        <footer type="log4net.Util.PatternString" value="[/task]%newline" />
        <conversionPattern value="%-5level %date{yyyy/MM/dd_HH:mm:ss,fff} [%thread]] - %message%newline" />
      </layout>

    </appender>

    <!-- デフォルトの出力設定 -->
    <root>
      <level value="ALL" />
      <appender-ref ref="DailyFileAppender" />
      <appender-ref ref="DebugAppender" />
      <!-- appender-ref ref="EventLogAppender" / -->
    </root>

  </log4net>

</configuration>

log4net.dllを実際のファイルパスに配置

VisualStudioで作成したソリューションフォルダの下に、「lib」フォルダを新規作成。
その中にダウンロードした「log4net.dll」をコピーする

log4net.dllをソリューションエクスプローラーにセット

ソリューションエクスプローラーを使って、ソリューション名右クリックから「Add」でディレクトリを追加し、ディレクトリ名を「lib」とする。
ソリューションエクスプローラーのlibフォルダに、ファイラー使ってlog4net.dllをDrag & Dropする。
※上記手順「log4net.dllを実際のファイルパスに配置」でファイラー使ってlog4net.dllをlibフォルダに入れても、ソリューションエクスプローラーには反映されない。

参照設定に追加

ソリューションエクスプローラーの「参照設定」を右クリック。
「参照の追加」→「参照」と進み、libフォルダの中にあるlog4net.dllを指定する。

対象のフレームワーク設定

ソリューションエクスプローラーにて、「プロジェクト名を右クリック」→「プロパティ」。
「アプリケーション」タブにある「対象のフレームワーク」を「.NET Framework4」とする。
※注意!!・・・ダウンロードしたlog4net.dllがコンパイルされたフレームワークでなければ「using log4net;」とソースに書くと「名前空間がみつからない」と怒られる。

設定XMLファイルを常にコピー

ソリューションエクスプローラーにある「log4net.config」を右クリック。
プロパティの「出力ディレクトリにコピー」を「常にコピーする」にしておく。
※exeファイルと同じディレクトリにlog4net.configが吐出される。
log4net.configを好きなディレクトリに配置したい場合は設定しない。

log4net.dllを常にコピー

ソリューションエクスプローラーにある「log4net.dll」を右クリック。
プロパティの「出力ディレクトリにコピー」を「常にコピーする」にしておく。
※exeファイルと同じディレクトリにlog4net.dllが吐出される。

導入したいクラスにプロパティを記述

// usingをお忘れなく
using log4net;
using log4net.Appender;
using log4net.Repository.Hierarchy;

namespace hogehoge
{
    public partial class MainForm : Form
    {
        // log <-- このへんに追加
        private static readonly ILog LOG = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);

        public MainForm()
        {
            InitializeComponent();
            HFRCWatcherInitialize();
        }

ログを出力

こんな感じで出力

string valueStr = "hogehoge";
int valueNumber = 1;

LOG.ErrorFormat("あれやこれやが大変なことになっています:{0}",valueStr);
LOG.InfoFormat("問題なく動いているよ!!: User -> {0}, Number -> {1}", valueStr, valueNumber);



優良アダルトサイト紹介の最終形態!!MaxInfo