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 の フォロー」 お願いします!!