Log4net appender阈值不工作
我已经在我的log4net配置中为我的应用程序设置了一个Log4net appender阈值不工作,log4net,log4net-configuration,Log4net,Log4net Configuration,我已经在我的log4net配置中为我的应用程序设置了一个logfileAppender和一个consoleAppender。我希望日志文件appender只写错误消息及以上,控制台appender写调试及以上 我的配置是: 我发现错误和调试都被输出到我的日志文件appender。如何将其限制为仅出现错误?要对附加器进行非常具体的筛选,需要为日志文件附加器配置LevelMatchFilter或LevelRangeFilter,以筛选实际输出的事件。 例如: 或 将其中一个放入标签中,这
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。无论这有多旧,你都是我的英雄!听起来你回答的问题和被问到的相反?该问题具有调试级别/优先级和错误阈值。