1

l4n 構成で問題が発生しました。大きなプロジェクトに取り組んでいて、コードを使用してロガーを構成しようとしています。したがって、これは私の唯一の app.config-content です:

<configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
</configSections>
<log4net>
    <root>
        <level value="DEBUG"/>
    </root>
    <logger name="NESSEEServerCoreLogger">
        <level value="INFO"/>
    </logger>
</log4net>

そして、以下がコードに書かれています。この場合、1 つのクラスの Ctor にあります: (変更のみ: m_RFA メンバーは、生産コードのクラス メンバーです)

log4net.Filter.LevelRangeFilter lrf = new log4net.Filter.LevelRangeFilter();
lrf.LevelMin = log4net.Core.Level.Info;
lrf.LevelMax = log4net.Core.Level.Fatal;

//create and configure rolling file appender
log4net.Appender.RollingFileAppender m_Rfa = new log4net.Appender.RollingFileAppender();
m_Rfa.Name = "NESSEEServerCore_RFA";
m_Rfa.ImmediateFlush = true;
m_Rfa.AppendToFile = true;
m_Rfa.File = @"C:\Temp\NESSEEServerCore_Log.txt";
m_Rfa.MaxFileSize = 52428800;  // 50 MiB
m_Rfa.MaxSizeRollBackups = 5;
m_Rfa.StaticLogFileName = true;
m_Rfa.RollingStyle = log4net.Appender.RollingFileAppender.RollingMode.Size;

var layout = new log4net.Layout.PatternLayout()
{
    ConversionPattern = "[%utcdate{dd.MM.yyyy HH:mm:ss,fff}] %level\t%type{1}->%method:%line : %message %newline"
};

layout.ActivateOptions();
m_Rfa.Layout = layout;
m_Rfa.AddFilter(lrf);
m_Rfa.AddFilter(new log4net.Filter.DenyAllFilter());
m_Rfa.ActivateOptions();
log4net.Config.BasicConfigurator.Configure(m_Rfa);

これはこれまでのところうまくいきます。唯一の問題は次のとおりです。アプリケーションで例外が発生すると (Windows サービスとして実行し、例外を引き起こすボタンを統合しました)、ロガーがファイルへの書き込みを停止することがあります。l4n で内部デバッグを有効にしました。これにより、次の出力が得られます。

7/31/2013 1:42:30 PM: log4net:ERROR [RollingFileAppender] ErrorCode: GenericFailure. Attempted to append to closed appender named [NESSEEServerCore_RFA].
7/31/2013 1:42:30 PM: log4net:ERROR [FileAppender] ErrorCode: GenericFailure. Attempted to append to closed appender named [].

2 番目のファイル Appender は、内部デバッグ自体用のファイルのようです。1:42:30 以降、ログ エントリはもうありません。

この問題を解決するにはどうすればよいですか? ロガーを完全に再初期化する必要がありますか?

4

0 に答える 0