FileAppender または RollingFileAppender でファイル出力する際、動的に or プログラム上で 出力ファイル名 を 取得 または 変更 する方法を記載します。
ここでは、「log4netをXMLで設定していたが、途中でそのファイル名を知りたい or ファイル名を変えたい」といったケースを想定しています。 以下では、log4net の 設定例と、その設定のときにどうやってファイル名を取得、設定するかを記載します。
まずは前提となる log4net の設定です。
app.config
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | < configuration > < log4net > < appender name = "RollingLogFileAppender" type = "log4net.Appender.RollingFileAppender" > < file value = "logfile" /> < appendToFile value = "true" /> < rollingStyle value = "Date" /> < datePattern value = "yyyyMMdd-HHmm" /> < layout type = "log4net.Layout.PatternLayout" > < conversionPattern value = "%date [%thread] %-5level %logger [%property{NDC}] - %message%newline" /> </ layout > </ appender > < root > < level value = "ALL" /> < appender-ref ref = "RollingLogFileAppender" /> </ root > </ log4net > </ configuration > |
次に、上記設定のとき 出力先ファイル名を動的に取得、変更するサンプルコードです。
Program.cs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | namespace ConsoleApplication { using log4net; using log4net.Appender; using log4net.Repository.Hierarchy; public class Program { public void TestMethod() { // Loggerの生成 var logger = LogManager.GetLogger( "samplelogger" ); // RootのLoggerを取得 var rootLogger = ((Hierarchy)logger.Logger.Repository).Root; // RootのAppenderを取得 var appender = rootLogger.GetAppender( "RollingLogFileAppender" ) as FileAppender; // ファイル名の取得 var filepath = appender.File; // ファイル名の設定 appender.File = @"D:\log\samplelogger" ; appender.ActivateOptions(); } } } |
log4net の設定では、Appender が Root に保存されており、ILog.Logger には保存されていません。 なので、プログラム上でも Root を取得して、該当する Appender にキャストした上でファイル名を取得、設定します。 今回は、Appender は 名前 を指定して取得しています。 ただし、取得されるのは IAppender なので、実装クラスである RollingFileAppender へキャストを行います。 ここでは、RollingFileAppenderの基本クラス(親クラス)である FileAppender へキャストしました。
ファイル名の取得は、Fileプロパティへアクセスすることで取得できます。
ファイル名の設定は、Fileプロパティへ設定した後、ActivateOptions メソッドを実行することで設定、反映させることができます。
関連記事
- log4net の Appender を プログラム上で動的に 取得 する 方法
- log4net の Appender を プログラム上で動的に 削除 する 方法
- log4net の Appender を プログラム上で動的に 生成、追加 する 方法
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!