是否可以在log4net配置中使用通配符记录器名称?

Rob*_*ine 24 .net c# log4net

在我的应用程序中,我使用log4net,所有类型都根据其类型创建自己的记录器 - 例如:

private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
Run Code Online (Sandbox Code Playgroud)

在我开发时,我将根记录器保留在DEBUG上,以便从我的代码中捕获所有日志输出.

但是,第三方组件也使用相同的方法,但是每秒生成100条日志消息,我都不感兴趣.

是否可以在记录器配置中使用某种通配符,强制所有记录器仅记录WARN,例如:

 <logger name="com.thirdparty.*">
    <level value="WARN"/>
  </logger>
Run Code Online (Sandbox Code Playgroud)

[上面的确切示例,使用*不起作用]

Dmy*_*iak 34

您只需指定命名空间的一部分,即可应用于该命名空间中的所有消息(包括嵌套).

这是我经常使用的示例:

  <root>
    <level value="FATAL" />
    <appender-ref ref="RollingFile" />
  </root>

  <logger name="MyCompany.Web" >
    <level value="WARN" />
    <appender-ref ref="WebErrors" />
  </logger>

  <!-- Will log all FATALs from NHibernate, including NHibernate.SQL and all the nested -->
  <logger name="NHibernate" >
    <level value="FATAL" />
  </logger>
Run Code Online (Sandbox Code Playgroud)

另外我建议阅读手册.它提供了很多解释.例如,您可以阅读有关Logger Hierarchy的信息.这是从那里引用的:

如果记录器的名称后跟一个点是后代记录器名称的前缀,则称记录器是另一个记录器的祖先.如果记录器本身与后代记录器之间没有祖先,则称记录器是子记录器的父节点.层次结构的工作方式与.NET中的命名空间和类层次结构非常相似.

并且:

级别继承: 给定记录器X的继承级别等于记录器层次结构中的第一个非空级别,从X开始并在层次结构中向上朝向根记录器继续.

  • 感谢Dmitriy的链接.如果每个人都阅读手册,我不禁想知道Stack Overflow会在哪里. (3认同)