我已经成立了一个logfileAppender
和consoleAppender
在我的log4net的配置我的应用程序。 我想日志文件附加器只写错误讯息及以上和控制台附加目的地写DEBUG及以上。
我的配置是:
<log4net debug="false">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<threshold value="ERROR"/>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %m%n" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
我发现,这两个错误和调试正在输出到我的日志文件的appender。 如何将其限制为仅错误?
还需要注意的是level
的记录标签不工作的方式相同threshold
或LevelMatchFilter
。
Level
指明了记录,实际上将生成的语句。 这是你可以在你的代码测试什么。
Threshold
,另一方面,过滤掉任何低于你的阈值的所有日志信息。
这意味着,具有阈值比所述最高记录水平是没有意义的。 我见过很多次一个如何设置信息的水平(因为这是最追加程序将使用的),然后创建具有DEBUG的阈值的附加目的地。 然后你感到惊讶时没有调试信息的附加器实际上出现...
要获得非常具体的滤波一个appender,你需要配置LevelMatchFilter
或LevelRangeFilter
的日志文件附加器过滤这实际上是输出的事件。
例如:
<filter type="log4net.Filter.LevelRangeFilter">
<levelMin value="ERROR"/>
<levelMax value="FATAL"/>
</filter>
要么
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR"/>
</filter>
把这些你里面一个<appender>
标签,这应该为你工作:
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR"/>
</filter>
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<threshold value="ERROR"/>
</appender>
注意:更新,删除错误所指出的kgiannakakis。
I've created a sample console application using your log4net config and I'm getting the exact behaviour you appear to be wanting....
using System;
using System.IO;
using log4net;
using log4net.Config;
namespace SO_1171258
{
class Program
{
private static readonly ILog log = LogManager.GetLogger(typeof(Program));
static void Main()
{
XmlConfigurator.ConfigureAndWatch(new FileInfo(AppDomain.CurrentDomain.GetData("APP_CONFIG_FILE").ToString()));
log.Error(new Exception("error log statment"));
log.Debug("debug log statment");
}
}
}
When I run this application, the only thing in the logfile is:
2014-01-27 15:02:51,387 Main - System.Exception: error log statment
And to the screen I see:
2014-01-27 15:05:52,190 System.Exception: error log statment
2014-01-27 15:05:52,218 debug log statment
Here is the entirety of my app.config file:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler,log4net"/>
</configSections>
<log4net debug="false">
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<threshold value="ERROR"/>
</appender>
<appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender" >
<layout type="log4net.Layout.PatternLayout">
<param name="ConversionPattern" value="%d %m%n" />
</layout>
</appender>
<root>
<priority value="DEBUG" />
<appender-ref ref="ConsoleAppender" />
<appender-ref ref="LogFileAppender" />
</root>
</log4net>
</configuration>
您收到的答案是部分正确。 该Threshold
仅用于设置附加电平的下限。 误差的阈值将实际接收ERROR和致命错误(这是“上方” ERROR)。
你想实现一个LevelMatchFilter
与“ERROR”(和“DEBUG”为其他附加器)的电平值。 但是,还必须添加一个DenyAllFilter
到过滤器链的末端。
例如:
<appender name="LogFileAppender" type="log4net.Appender.FileAppender,log4net" >
<param name="File" value="log.txt" />
<param name="AppendToFile" value="true" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%d %M - %m%n" />
</layout>
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="ERROR" />
</filter>
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
我已经实现,因为log4net的1.2.10(你可以看到我对这个话题的问题DenyAllFilter 这里 )。
您需要使用加属性。 见这里的一个例子。 您需要定义两个记录器。