1

我的 l4n 配置遇到了麻烦。在一个大项目上工作,我尝试通过代码配置我的记录器。所以这是我唯一的 app.config 内容:

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

并且在代码中编写了以下内容,在这种情况下在一个类的 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 [].

第二个文件 Appender 似乎是用于内部调试本身的文件。1:42:30 之后,不再有日志条目。

我该怎么做才能解决这个问题?我必须完全重新初始化记录器吗?

4

0 回答 0