FileAppender または RollingFileAppender でファイル出力する際、動的に or プログラム上で 出力ファイル名 を 取得 または 変更 する方法を記載します。
ここでは、「log4netをXMLで設定していたが、途中でそのファイル名を知りたい or ファイル名を変えたい」といったケースを想定しています。 以下では、log4net の 設定例と、その設定のときにどうやってファイル名を取得、設定するかを記載します。
まずは前提となる log4net の設定です。
app.config
<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
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 の フォロー」 お願いします!!