我的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之后,没有日志条目了。
我该怎么做才能解决这个问题? 我是否必须完全重新初始化记录器?