log4net在代码中使用config关闭了appender错误

时间:2013-07-31 11:50:35

标签: log4net appender

我的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>

以下是代码中写的,在本例中是在一个类的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之后,没有日志条目了。

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

0 个答案:

没有答案