Log4net appender阈值不工作

Log4net appender阈值不工作,log4net,log4net-configuration,Log4net,Log4net Configuration,我已经在我的log4net配置中为我的应用程序设置了一个logfileAppender和一个consoleAppender。我希望日志文件appender只写错误消息及以上,控制台appender写调试及以上 我的配置是: 我发现错误和调试都被输出到我的日志文件appender。如何将其限制为仅出现错误?要对附加器进行非常具体的筛选,需要为日志文件附加器配置LevelMatchFilter或LevelRangeFilter,以筛选实际输出的事件。 例如: 或 将其中一个放入标签中,这

我已经在我的log4net配置中为我的应用程序设置了一个
logfileAppender
和一个
consoleAppender
。我希望日志文件appender只写错误消息及以上,控制台appender写调试及以上

我的配置是:



我发现错误和调试都被输出到我的日志文件appender。如何将其限制为仅出现错误?

要对附加器进行非常具体的筛选,需要为日志文件附加器配置
LevelMatchFilter
LevelRangeFilter
,以筛选实际输出的事件。
例如:



将其中一个放入
标签中,这应该对您有用:



注意:已更新以删除kgiannakakis指出的错误。

您需要使用属性。有关示例,请参见。您需要定义两个记录器。

您收到的答案部分是正确的。
阈值
仅用于设置附加级别的下限。错误阈值将实际接收错误和致命错误(即“高于”错误)

您确实希望实现一个级别值为“ERROR”(另一个appender为“DEBUG”)的
LevelMatchFilter
。但是,您还必须在筛选链的末尾添加一个
DenyAllFilter

例如:


)。

还请注意,记录器中的
级别标记的工作方式与
阈值或
级别匹配过滤器的工作方式不同

级别
指示实际将生成的日志语句。这就是您可以在代码中测试的内容

Threshold
另一方面,过滤掉所有低于阈值的日志消息


这意味着阈值高于记录器的最高级别毫无意义。我已经看过很多次了,一个人如何设置一个信息级别(因为这是大多数appender将使用的),然后创建一个具有调试阈值的appender。然后当appender上实际没有出现调试消息时,您会感到惊讶…

我已经使用您的log4net配置创建了一个示例控制台应用程序,我得到了您想要的确切行为

使用系统;
使用System.IO;
使用log4net;
使用log4net.Config;
名称空间SO_1171258
{
班级计划
{
private static readonly ILog log=LogManager.GetLogger(typeof(Program));
静态void Main()
{
XmlConfigurator.ConfigureAndWatch(新文件信息(AppDomain.CurrentDomain.GetData(“APP_CONFIG_文件”).ToString());
错误(新异常(“错误日志声明”);
调试(“调试日志状态”);
}
}
}
运行此应用程序时,日志文件中唯一的内容是:

2014-01-27 15:02:51387主系统异常:错误日志状态

在屏幕上我看到:

2014-01-27 15:05:52190系统异常:错误日志状态

2014-01-27 15:05:52218调试日志状态

以下是我的app.config文件的全部内容:



但日志文件是一个附加程序,可加性属于记录器。我已经纠正了这一点。实际上,您创建了两个记录器,每个记录器都有一个appender,并使用additivity属性。当然不是。那么阈值元素的用途是什么?您试过了吗?默认情况下,LogFileAppender继承其父(根)appender,因此默认情况下它打印调试消息。尝试将root的优先级设置为ERROR,看看会发生什么。@kgiannakakis,这不对-记录器不是追加器。由于附加程序连接到根记录器,每个记录器上记录的事件都将由这些附加程序处理,除非特定记录器的可加性设置为false,在这种情况下,不会处理该记录器及其以下的事件。在这种情况下,appender的阈值应该起作用-这让我认为可能并非所有信息都已发布?@Dav.evans,您能否确认以上是完整的配置?你用的是什么伐木机?是否确定代码中没有以编程方式进行配置更改?相同的问题/答案:您是否尝试了我在回答中建议的过滤器?这没什么区别吗?我已经用你的log4net配置创建了一个示例控制台应用程序,我得到了你想要的确切行为……请看下面的答案。Maestrean这对我来说不适用于最新版本的log4net。无论这有多旧,你都是我的英雄!听起来你回答的问题和被问到的相反?该问题具有调试级别/优先级和错误阈值。