我有一个应用程序,有时我想登录Debug
模式。不幸的是,我链接到第三方库,我无法重建。它是为了使用log4net
而构建的,在Debug
模式下它非常冗长。
我不想从该图书馆收到任何通知。但我想从所有其他想要编写的代码中获取日志通知。
使用SMTPAppender
或RollingFile Appender
作者时,有没有办法排除命名空间或库的日志?
答案 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
下的内容添加以下内容
<logger name="MyApp.Main">
<level value="DEBUG" />
<appender-ref ref="A1" />
</logger>
并从root
级别删除任何appender。然后,您只记录MyApp
名称下的记录器。有关详细信息,请参阅the documentation。
如果您运气不好并且记录器不符合此层次结构,您仍然可以在您的appender中使用LoggerMatchFilter来过滤掉它们。这可以让您定义记录器可以传递的内容,或者记录器不能传递的内容。有很多filters,随时可以探索它们