我显然不懂log4net。我的根日志级别配置如下:
<root>
<level value="ERROR"/>
<appender-ref ref="FileAppender" />
</root>
我的日志初始化如下所示:
private static readonly log4net.ILog LOG = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
我的实际日志记录调用如下:
LOG.Error("Error submitting Registration.", exc);
这是有趣的部分。仅当我将根日志级别设置为INFO时,此日志语句才有效。为什么日志级别ERROR不起作用(我只想要错误,而不是Info,Debug等...)?
答案 0 :(得分:3)
<root>
<level value="ALL" />
...
</root>
我的log4net-Configfile中的某个人:
<appender name="FileAppender_FullLog" type="log4net.Appender.FileAppender">
<file value="Log_Full.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" />
</layout>
</appender>
<appender name="FileAppender_SmallLog" type="log4net.Appender.FileAppender">
<file value="Log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="INFO" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
..
</appender>
<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<root>
<level value="ALL" />
<appender-ref ref="FileAppender_FullLog" />
<appender-ref ref="FileAppender_SmallLog" />
<appender-ref ref="SmtpAppender" />
</root>
修改强>
<appender name="FileAppender_SmallLog" type="log4net.Appender.FileAppender">
<file value="Log.txt" />
<appendToFile value="true" />
<lockingModel type="log4net.Appender.FileAppender+MinimalLock" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%date{yyyy-MM-dd HH:mm:ss} [%-5level] [%logger{2}] - %message%newline" />
</layout>
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR" />
<levelMax value="FATAL" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
<!--LogLevel: OFF, FATAL, ERROR, WARN, INFO, DEBUG, ALL -->
<root>
<level value="ALL" />
<appender-ref ref="FileAppender_SmallLog" />
</root>
更好的方法是使用“&lt; filter type =”log4net.Filter.LevelRangeFilter“&gt; ...”,因为如果您想要这个功能,可以为每个appender更改此设置。
答案 1 :(得分:3)
在我们聪明的建筑师的帮助下,我想出了这个......
我曾经在assemblyInfo.cs中进行日志初始化(但这是错误的)。
我将日志初始化移动到app_startup中的global.asax:
protected void Application_Start(Object sender, EventArgs e)
{
string configFilePath = Server.MapPath("~/Config/Log4Net.config");
log4net.Config.XmlConfigurator.ConfigureAndWatch(new FileInfo(configFilePath));
}
server.MapPath位非常重要,否则log4net会尝试从system32 \ inetsrv文件夹中读取其配置。
我认为由于程序集的加载顺序或类似的原因,我之前的日志记录时常起作用。无论哪种方式,这个解决方案都有效。