有没有办法排除项目被记录?

时间:2014-09-09 13:58:55

标签: log4net log4net-configuration

我有一个应用程序,有时我想登录Debug模式。不幸的是,我链接到第三方库,我无法重建。它是为了使用log4net而构建的,在Debug模式下它非常冗长。

我不想从该图书馆收到任何通知。但我想从所有其他想要编写的代码中获取日志通知。

使用SMTPAppenderRollingFile Appender作者时,有没有办法排除命名空间或库的日志?

2 个答案:

答案 0 :(得分:1)

您可以使用过滤器,例如

<filter type="log4net.Filter.LoggerMatchFilter">
  <!-- allows this sub-namespace to be logged... -->
  <loggerToMatch value="Noisy.Namespace.But.Important" />
</filter>
<filter type="log4net.Filter.LoggerMatchFilter">
  <!-- ...but not the rest of it -->
  <loggerToMatch value="Noisy.Namespace" />
  <acceptOnMatch value="false" />
</filter>

article的详细信息。

答案 1 :(得分:1)

我想你正在使用的配置中只设置了日志记录基础结构的根级别:

<root>
    <level value="DEBUG" />
    <appender-ref ref="A1" />
</root>

但是,可以使用记录器名称定义其他级别的日志记录。如果您或第三方应用程序遵循标准做法,则您的记录器以其命名空间所使用的类命名,因此您将使用名为

的记录器
  • MyApp.Main
  • MyApp.Business
  • MyApp.Business.Messages
  • ThirdParty.API
  • 等...

在这种情况下,您可以做的是在您感兴趣的命名空间级别声明日志记录。例如,仅记录MyApp.Main下的内容添加以下内容

<logger name="MyApp.Main">
    <level value="DEBUG" />
    <appender-ref ref="A1" />
</logger>

并从root级别删除任何appender。然后,您只记录MyApp名称下的记录器。有关详细信息,请参阅the documentation

如果您运气不好并且记录器不符合此层次结构,您仍然可以在您的appender中使用LoggerMatchFilter来过滤掉它们。这可以让您定义记录器可以传递的内容,或者记录器不能传递的内容。有很多filters,随时可以探索它们