如何在log4net中将不同的日志级别记录到不同的日志附加器

如何在log4net中将不同的日志级别记录到不同的日志附加器,log4net,log4net-configuration,Log4net,Log4net Configuration,我有一个WinForm,它显示日志信息,但我希望它只显示信息级别,但我希望日志文件中的日志也包含调试级别 以下是我的配置: 现在,它被设置为LogFileAppender和RichTextBoxAppender的信息。我尝试在Gateway logger中取出LogFileAppender并移动到另一个logger,并为这个新的logger设置为“调试”级别,但它仍在执行其中一个操作。如何配置它,使LogFileAppender具有调试级别,而RichTextBoxAppender具有信息级

我有一个WinForm,它显示日志信息,但我希望它只显示信息级别,但我希望日志文件中的日志也包含调试级别

以下是我的配置:



现在,它被设置为LogFileAppender和RichTextBoxAppender的信息。我尝试在Gateway logger中取出LogFileAppender并移动到另一个logger,并为这个新的logger设置为“调试”级别,但它仍在执行其中一个操作。如何配置它,使LogFileAppender具有调试级别,而RichTextBoxAppender具有信息级别?

您应该能够向两个Appender添加一个过滤器



这样一来,一个appender只会记录到某个级别,而另一个则会记录到不同的级别,即使它们是由同一个记录器定义的。

我同意@gwhitake的观点,即您可以使用级别范围过滤器。但是,我还想补充一点,如果您只想选择一个级别,可以使用
LevelMatch
过滤器。此过滤器还允许您在其末尾添加另一个过滤器,以便创建具有两个或更多级别的过滤器,即使它们在顺序中不相邻

例如,以下筛选器将仅捕获调试和错误消息(仅作为示例):


这里的一个关键是,我们需要在最后安装DenyAllFilter。这告诉记录器,如果它到达这一行,就不要记录它。这样,它将记录调试消息、错误消息和其他信息

有很多方法可以操作过滤器以获得您想要的内容。下面是一篇文章(完整免责声明:我写的),它向您展示了如何使用过滤器做一些不同的事情,除了级别范围之外:


谢谢,这就解决了问题。我还需要更改level value=“DEBUG”,然后它就会按预期工作。有趣的技巧。IMHO,它比公认的解决方案更灵活,因为它允许在公认的级别范围内拒绝某些级别