C#でlog4netライブラリを使うときの導入方法
log4netを利用すると、柔軟な書式でログを残すことが出来るようになります。
自分用のメモな勢いで殴り書き。
手順
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フォルダに入れても、ソリューションエクスプローラーには反映されない。
対象のフレームワーク設定
ソリューションエクスプローラーにて、「プロジェクト名を右クリック」→「プロパティ」。
「アプリケーション」タブにある「対象のフレームワーク」を「.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);