如何将 log4net 过滤器与 AND 组合在一起
我想创建一个仅记录特定级别且仅记录特定记录器的附加程序。据我所见,根据本教程,过滤器进行了 OR 运算一起。我如何将 log4net 过滤器与在一起?这是我正在做的一个例子:
<appender name="MyAppender">
<!--log only INFO level-->
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<!--log only UserController logger-->
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="MyLogger" />
</filter>
<!-- do not log anything else -->
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
I would like to create an appender that logs only for a particular level AND only for a particular logger. From what I'm seeing, and based on this tutorial, the filters are ORed together. How can I AND the log4net filters together? Here's an example of what I'm doing:
<appender name="MyAppender">
<!--log only INFO level-->
<filter type="log4net.Filter.LevelMatchFilter">
<levelToMatch value="INFO" />
</filter>
<!--log only UserController logger-->
<filter type="log4net.Filter.LoggerMatchFilter">
<loggerToMatch value="MyLogger" />
</filter>
<!-- do not log anything else -->
<filter type="log4net.Filter.DenyAllFilter" />
</appender>
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
您可以编写一个自定义的 AndFilter,这相当简单。您可以使用此处发布的代码 - https://stackoverflow.com/a/8859037/984438
用法如下:
You can write a custom AndFilter, which is fairly easy. You can use the code posted here - https://stackoverflow.com/a/8859037/984438
Usage will be like:
您可以使用 ForwardingAppender (请参阅 配置示例)并在那里放置一个过滤器,然后目标附加程序中的另一个(或随意链接它们)。
我相信在提出问题时这个附加程序可能不是 log4net 的一部分。
You could use ForwardingAppender (see Config examples) and put one filter there and the other in your target appender (or chain them at will).
I believe this appender might not have been part of log4net at the time of the question.
解决方法
我刚刚想出了以下解决方法,似乎可以解决问题。首先,我从附加程序中删除了 loggerToMatch 过滤器。然后我修改了记录器设置,如下所示:
由于我只有一个过滤器,因此我的过滤器逻辑很好。记录器部分仅针对我选择的记录器指向此附加程序,但所有其他附加程序也会拾取该事件,因为它们是在根中指定的。这是可行的,但它没有解释如何在附加程序中将过滤器与在一起。我还是很想知道。
Workaround
I just came up with the following workaround that seems to do the trick. First, I removed the loggerToMatch filter from the appender. Then I modified the logger settings as such:
Since I only have one filter my filter logic is fine. The logger section points to this appender only for my chosen logger, yet all the other appenders pick up the event as well because they're specified in the root. This works but it doesn't explain how to AND the filters together in the appender. I would still like to know.