【WPF】log4netでログ出力をする方法を試す

公開日:2019-03-12
最終更新:2019-03-12
※この記事は外部サイト(https://www.doraxdora.com/blog/2017/06/10/...)からのクロス投稿です

おはようございます。

早速 log4net を使ってログ出力を試してみました。

プログラムは前回のものを使用します。
WPFでSQLiteを使ってデータを DataGrid に表示してみる

Nuget によりパッケージをダウンロード


前回と同様、 Nuget でパッケージを入手、インストールします。

ソリューションエクスプローラーからプロジェクトを選択、右クリックし
「Nuget パッケージの管理」を選択します。

Nuget パッケージ管理画面が表示されるので、
検索窓に「log4net」を入力し、「log4net」を選択、インストールボタンをクリックします。

変更の確認ダイアログが表示されるので、
「OK」ボタンをクリックします。

出力ビューに「終了」が出力されればOKです。

アセンブリ設定ファイルの修正


次のファイルに記述を追加します。

App.config に log の出力設定を記述する方法と、
別ファイルに記述する方法があるようですが、今回は別ファイルとします。

AccemblyInfo.cs

// log4net を利用するための設定
//
[assembly: log4net.Config.XmlConfigurator(ConfigFile = “../../log4net.config”, Watch = true)]

設定ファイルの追加


log4net.config を新規作成

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="ConsoleAppender" type="log4net.Appender.ConsoleAppender">  
      <!-- 出力文字列のフォーマット -->  
      <layout type="log4net.Layout.PatternLayout">  
        <!--^「日付、スレッド、レベル、logger名、メッセージ」が出力^-->  
        <!--^「%-5p」というのは5文字以下の場合、右側に空白を入れる設定^-->  
        <param name="ConversionPattern" value="%d [%t] %-5p %c - %m%n" />  
      </layout>  
    </appender>  

    <!-- ファイル出力用のアペンダ(日付でローテーション) -->  
    <appender name="DailyFileAppender"  
      type="log4net.Appender.RollingFileAppender">  
      <!-- ログファイルの切替 { サイズ: Size, 日付: Date } -->  
      <param name="RollingStyle" value="Date" />  
      <!-- ファイル名 -->  
      <param name="File" value="log/" />  
      <!-- ファイル名に付加する日付パターン -->  
      <param name="DatePattern" value='yyyyMMdd".log"' />  
      <!-- ファイル名の固定 -->  
      <param name="StaticLogFileName" value="false" />  
      <!-- ファイル書き込み { 追記: true, 上書き: false } -->  
      <param name="AppendToFile" value="true" />  
      <!-- 出力文字列のフォーマット -->  
      <layout type="log4net.Layout.PatternLayout">  
        <conversionPattern value="%-5level %date{yyyy/MM/dd HHss, fff} [%thread] %logger - %message%newline" />  
      </layout>  
    </appender>  

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

検索ボタンクリック時にログを出力


次の記述を追加します。

using log4net;  

ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
logger.Info(“MainWindows 検索ボタンクリック”);


 

MainWindow.xaml.cs(クリックイベントのみ抜粋)

using log4net;   

        /// <summary>  
        /// 検索ボタンクリックイベント.  
        ///   
        /// </summary>  
        /// <param name="sender"></param>  
        /// <param name="e"></param>  
        private void search_button_Click(object sender, RoutedEventArgs e)  
        {  
            ILog logger = LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);  
            logger.Info("MainWindows 検索ボタンクリック");  

            using (var conn = new SQLiteConnection("Data Source=SampleDb.sqlite"))  
            {  
                conn.Open();  

                // 猫データマスタを取得してコンボボックスに設定する  
                using (DataContext con = new DataContext(conn))  
                {  
                    String searchName = this.search_name.Text;  
                    String searchKind = (this.search_kind.SelectedValue as Kind).KindCd;  

                    // データを取得  
                    Table<Cat> tblCat = con.GetTable<Cat>();  

                    // サンプルなので適当に組み立てる  
                    IQueryable<Cat> result;  
                    if (searchKind == "") {  
                        // 名前は前方一致のため常に条件していしても問題なし  
                        result = from x in tblCat  
                                 where x.Name.StartsWith(searchName)  
                                 orderby x.No  
                                 select x;  
                    }  
                    else  
                    {  
                        result = from x in tblCat  
                                 where x.Name.StartsWith(searchName) &amp; x.Kind == searchKind  
                                 orderby x.No  
                                 select x;  

                    }  
                    this.dataGrid.ItemsSource = result.ToList();  

                }  

                conn.Close();  
            }  

        }

 

ログを出力してみる


アプリケーションをデバッグ起動します。

検索ボタンをクリックします。

コンソール出力にログが出力されるのを確認します。

実行ディレクトリ>log>yyyymmdd.log が出力されていることを確認します。

ひとまずここまで。

まとめ


Javaで log4j を使っていたので、割とすんなりいきました。
それにしても便利ですね。

ではでは。

 

記事が少しでもいいなと思ったらクラップを送ってみよう!
5
+1
@doraxdoraの技術ブログ 主に Java, C#, Python, Javascript の記事を載せていく予定。

よく一緒に読まれている記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる

技術ブログをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

技術ブログを開設する

Qrunchでアウトプットをはじめよう

Qrunch(クランチ)は、ITエンジニアリングに携わる全ての人のための技術ブログプラットフォームです。

Markdownで書ける

ログ機能でアウトプットを加速

デザインのカスタマイズが可能

技術ブログ開設

ここから先はアカウント(ブログ)開設が必要です

英数字4文字以上
.qrunch.io
英数字6文字以上
ログインする