log4net で ログレベル を 動的に 取得、設定 する 方法

0 件のコメント

log4net の ログレベルを 動的に 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="Error" />
            <appender-ref ref="RollingLogFileAppender" />
        </root>
    </log4net>
</configuration>

次に、上記設定のとき ログレベルを動的に変更するサンプルコードです。

Program.cs

namespace ConsoleApplication
{
    using log4net;
    using log4net.Appender;
    using log4net.Repository.Hierarchy;
    using log4net.Core;

    public class Program
    {
        public void TestMethod()
        {
            // Loggerの生成
            var logger = LogManager.GetLogger("samplelogger");

            // RootのLoggerを取得
            var rootLogger = ((Hierarchy)logger.Logger.Repository).Root;

            // ログ出力
            logger.Debug("サンプルログ出力");
            logger.Info("サンプルログ出力");
            logger.Warn("サンプルログ出力");
            logger.Error("サンプルログ出力");
            logger.Fatal("サンプルログ出力");

            // ログレベル変更
            rootLogger.Level = Level.All;

            // ログ出力
            logger.Debug("サンプルログ出力");
            logger.Info("サンプルログ出力");
            logger.Warn("サンプルログ出力");
            logger.Error("サンプルログ出力");
            logger.Fatal("サンプルログ出力");
        }
    }
}

今回は設定がルートのLoggerにAppenderを登録しているので、ルートのLoggerを取得して、ログレベル変更しました。 実際は現在のLoggerでもログレベルは変更できるようでした。

関連記事