我的 log4net 配置是这样的:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="xxx" />
<from value="xxx" />
...
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<filter type="MyApp.Logging.EmailLogThrottler">
</filter>
</appender>
如果我在我的MyApp.Logging.EmailLogThrottler
类中,我看到它正在接收要过滤的 INFO 消息。 EmailLogThrottler 相当昂贵,因此我只希望它根据评估器阈值接收错误消息。这可能吗?
第二个问题 - 似乎首先应用过滤器,然后应用评估器阈值(这对我来说是违反直觉的)。这个假设正确吗?
对于第一个问题,设置阈值直接在附加器上为了获得最佳性能:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="xxx" />
<from value="xxx" />
...
<threshold value="ERROR"/>
See 此邮件列表发布了阈值和评估器之间的差异 http://mail-archives.apache.org/mod_mbox/logging-log4net-user/200509.mbox/%3CDDEB64C8619AC64DBC074208B046611C7694A9@kronos.neoworks.co.uk%3E
阈值和评估器有什么区别?
<!-- appender ... -->
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<threshold value="ERROR" />
其中一个会比另一个更快地丢弃消息吗?
Answer:
阈值与评估者不同。
该阈值是在 AppenderSkeleton 中实现的,因此
几乎所有附加程序都支持。这只是一个简单的测试
用于忽略级别低于阈值的日志记录事件。
尽早检查阈值,并且作为一个简单的测试非常有用
表现出色。
这篇文章接着谈到了 Evaluator,它的目的不是过滤消息,而是触发发送缓冲的消息:
Evaluator 是一个可插入对象,由
BufferingAppenderSkeleton 确定是否不应记录日志事件
被缓冲,而是立即写入/发送。如果评估者
确定该事件很重要,然后确定该事件的全部内容
当前缓冲区将与事件一起发送。评估者这样做
不像阈值或过滤器那样起作用,因为它不
丢弃事件。
它对过滤器有这样的说法:
过滤器具有很大的灵活性,因为多个过滤器可以
链接在一起以提供对事件的细粒度控制
是输出。因此,它们的成本也较高
就性能而言,链中的每个过滤器都是一个对象,并且被要求
决定正确的行动方针。
在简单的情况下
阈值过滤 Threshold 属性应该用于
对过滤器的偏好。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)