Rya*_*yan 4 .net log4net log4net-filter
我的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>
Run Code Online (Sandbox Code Playgroud)
如果我在我的MyApp.Logging.EmailLogThrottler班级中设置断点,我看到它正在接收要过滤的INFO消息.EmailLogThrottler相当昂贵,因此我只希望它根据评估者阈值接收ERROR消息.这可能吗?
次要问题 - 似乎首先应用过滤器然后应用评估器阈值(这对我来说是反直觉的).这个假设是否正确?
对于第一个问题,请直接在appender上设置阈值以获得最佳性能:
<appender name="SmtpAppender" type="log4net.Appender.SmtpAppender">
<to value="xxx" />
<from value="xxx" />
...
<threshold value="ERROR"/>
Run Code Online (Sandbox Code Playgroud)
有关阈值和评估者之间的差异,请参阅此邮件列表帖子
<!-- appender ... -->
<evaluator type="log4net.Core.LevelEvaluator">
<threshold value="ERROR"/>
</evaluator>
<threshold value="ERROR" />
Run Code Online (Sandbox Code Playgroud)
一个人比另一个人更早地丢弃消息吗?
阈值与评估者不同.
阈值在AppenderSkeleton中实现,因此几乎所有appender都支持.它只是一个简单的测试,用于忽略级别低于阈值的日志记录事件.早期检查阈值,因为简单的测试非常有效.
该帖子接着说明了这个关于评估器的内容,它不是为了过滤消息,而是为了触发发送缓冲的消息:
Evaluator是一个可插入的对象,BufferingAppenderSkeleton使用它来确定是否应该缓冲日志记录事件,而是立即写入/发送.如果Evaluator判定事件很重要,那么当前缓冲区的全部内容将与事件一起发送.评估程序不像阈值或过滤器那样起作用,因为它不会丢弃事件.
在过滤器上有这个说法:
过滤器具有很大的灵活性,因为可以将多个过滤器链接在一起,以便对输出的事件进行细粒度控制.因此,它们在性能方面也有较高的成本,链中的每个过滤器都是一个对象,并被要求决定正确的行动方案.
在阈值过滤的简单情况下,应优先使用阈值属性而不是过滤器.
| 归档时间: |
|
| 查看次数: |
460 次 |
| 最近记录: |