開発環境:visual studio2015
開発言語:c#.net
1.概要
ログデータの管理はアプリケーションにおいて非常に重要な要素となります。
ここの設計を間違えてしまうと、要因解析に無駄な時間を費やすことになります。
今回は【log4net】を使ってみます。
2.【lNuGet】から【log4net】を取得する
【ツール】→【NuGetパッケージマネージャー】→【ソリューションのNuGetパッケージの管理】をクリック。
【参照】をクリックし、検索ボックスに【log4net】と入力する。
検索結果から【log4net】を選択し【インストール】をクリック。
インストールが完了すると【ソリューションエクスプローラー】の参照にlog4netが追加されています。
3.【AssemblyInfo.cs】に【log4net】の設定ファイルの場所を教える
【ソリューションエクスプローラー】の【Properties】にある【AssemblyInfo.cs】を開く。
開いたファイルに下記の記述を追加する。
[assembly: log4net.Config.XmlConfigurator(ConfigFile = @"log4net.config.xml", Watch = true)]
4.【log4net】の設定
プロジェクトに【log4net.config.xml】を追加します。
【ソリューションエクスプローラー】のプロジェクト名を右クリックし
【追加】→【新しい項目】をクリックし、XMLファイルを作成する。
作成した【log4net.config.xml】の【プロパティ】の詳細から
【出力ディレクトリにコピー】の項目を【コピーしない】から【常にコピーする】に変更。
【log4net.config.xml】の内容は下記のとおりとしました。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <log4net> <appender name="DailyAppender" type="log4net.Appender.RollingFileAppender" > <File value="C:\ProgramData\testApplication\log\" /> <DatePattern value='yyyyMMdd".log"' /> <StaticLogFileName value="false" /> <RollingStyle value="date" /> <AppendToFile value="true" /> <MaximumFileSize value="10MB" /> <MaxSizeRollBackups value="30" /> <layout type="log4net.Layout.PatternLayout"> <ConversionPattern value="%date [%thread] [%-5level] (%method) - %message%n" /> </layout> <filter type="log4net.Filter.LevelRangeFilter"> <LevelMax value="FATAL" /> <LevelMin value="DEBUG" /> </filter> </appender> <root> <level value="ALL" /> <appender-ref ref="DailyAppender" /> </root> </log4net> </configuration>
①【appender】
・【type】
→【log4net.Appender.RollingFileAppender】に設定することで
ファイルの最大値を設定して、複数のログ・ファイルをサイクリックに作成します。
・【File】
→ファイルの出力先を設定します。
・【DatePattern】
→ファイル名に付加する日付パターンを指定します。
・【StaticLogFileName】
→ファイル名の固定。今回は固定しないを選択しています。
・【RollingStyle】
→日付によってログファイルを切り替えます。
・【AppendToFile】
→ログファイルへ追記します。falseにすると上書きとなります。
・【MaximumFileSize】
→10Mを超えると新しいログファイルを作成します。RollingStyleがsizeの時に有効になります。
・【MaxSizeRollBackups】
→保存ファイルの最大値です。
・【layout】
→ログに吐き出す内容を設定します。
【date】:ログの出力時刻です。
【thread】:スレッドの名前を出力します。名前がない場合はスレッド番号になります。
【level】:イベントのレベルを出力します。
【method】:メソッド名を出力します。
【message】:アプリで設定したメッセージが出力されます。
・【filter】
→【log4net.Filter.LevelRangeFilter】に設定することで
ログレベルの範囲でフィルタリングします。
ログレベルは【DEBUG】<【INFO】<【WARN】<【ERROR】<【FATAL】
の5種類で今回は全てのログを有効にしています。
②【root】
・【level】
→出力ログレベル
・【appender-ref】
→使用するappender名
5.実装する
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using log4net; namespace log4netTest { public partial class Form1 : Form { private static readonly log4net.ILog logger = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { logger.Debug("デバッグ"); logger.Info("情報"); logger.Warn("注意"); logger.Error("障害"); logger.Fatal("致命的障害"); } } }
実行すると
【C:\ProgramData\testApplication\log\20190619.log】
が作成され、ファイルの中身は
2019-06-19 18:35:28,533 [10] [DEBUG] (Form1_Load) - デバッグ 2019-06-19 18:35:28,554 [10] [INFO ] (Form1_Load) - 情報 2019-06-19 18:35:28,555 [10] [WARN ] (Form1_Load) - 注意 2019-06-19 18:35:28,556 [10] [ERROR] (Form1_Load) - 障害 2019-06-19 18:35:28,556 [10] [FATAL] (Form1_Load) - 致命的障害
のように出力されます。