C# 是否可以在log4net配置中使用通配符记录程序名称?

C# 是否可以在log4net配置中使用通配符记录程序名称?,c#,.net,log4net,C#,.net,Log4net,在我的应用程序中,我使用log4net,所有类型都根据自己的类型创建自己的记录器-例如: private static readonly ILog Log = LogManager.GetLogger(typeof(Program)); 在开发过程中,我让根日志记录器处于调试状态,以便捕获代码中的所有日志输出 然而,第三方组件也使用相同的方法,但每秒生成100条日志消息,我对此不感兴趣 是否可以在记录器配置中使用某种通配符,强制所有记录器仅在警告时记录,例如: <logger name

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

private static readonly ILog Log = LogManager.GetLogger(typeof(Program));
在开发过程中,我让根日志记录器处于调试状态,以便捕获代码中的所有日志输出

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

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

 <logger name="com.thirdparty.*">
    <level value="WARN"/>
  </logger>


[上面的例子,使用*不起作用]

你不能做与你要求相反的事情吗。我的意思是只需将默认日志级别设置为warn,然后将您定义的特定记录器设置为DEBUG

此外,您可以将附加程序的阈值设置为调试,并让另一个附加程序设置警告

例如:


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

以下是我经常使用的示例:


. 以下是其中的引述:

伐木者被称为人类的祖先 另一个记录器,如果其名称后跟 点是后代的前缀 记录器名称。记录器被称为 子记录器的父级(如果有) 在它和世界之间没有祖先 后代记录器。等级制度有效 非常类似于 NET中的命名空间和类层次结构

而且:

级别继承: 给定记录器X的继承级别等于第一个 记录器中的非空级别 层次结构,从X和 在层次结构中向上进行 朝向根记录器


@布莱恩-谢谢你的回复。是的,我可以,但问题是我有很多类型。采用白名单方法进行日志记录会使我的日志记录配置变得庞大而笨拙,这就是为什么我想知道采用黑名单方法的原因。我只是给出了一个可能的方法,这取决于您定义的其他记录器的数量。我更新了我的答案,建议在appender级别定义一个阈值。然后只需将第三方库更改为在appender仍设置为DEBUG时使用具有适当阈值的appender。@Brian-无论如何,感谢您的建议-如果您只有几个记录器,这是一个很好的方法。至于建议的第二部分——在我的例子中,我希望两者都指向同一个目标(单个日志文件或控制台窗口)。这种方法在那里仍然有效吗?不,如果更改appender上的阈值,它将应用于记录到它的每个记录器。这意味着,如果你要将所有记录器指向同一个附加器,那么它们都将具有相同的阈值。这对你的处境不起作用。@Dmitry-你说得对。我从来不知道!我现在问这个问题几乎觉得有点傻:)。谢谢你的回答。顺便说一句,所有这些都在log4net网站上有很好的记录。我在答案中添加了链接。谢谢链接Dmitry。我忍不住想,如果每个人都阅读手册,堆栈溢出会在哪里。