如何禁用类或整个包的记录器?

Posted

技术标签:

【中文标题】如何禁用类或整个包的记录器?【英文标题】:How to disable loggers of a class or of whole package? 【发布时间】:2011-06-25 18:27:53 【问题描述】:

我正在使用Apache Commons Logging ™。现在我想使用SimpleLog 实现,但是当我更改级别时,库中的记录器就出来了。我希望它关闭它们。

是否有一种简单的方法可以更改整个包的日志级别(Log4j 可以这样做)?

我试过设置

org.apache.commons.logging.simplelog.log.foo=fatal

在属性文件中禁用(设置为致命是可以的)foo 记录器,但它不起作用(foo 是出现在输出中的记录器名称:[INFO] foo - Message)。

【问题讨论】:

如果你有时间,我建议你看看 SLF4J。 slf4j.org/manual.html - 它充当实际日志框架之上的元层 - 包括 log4j。它很容易设置。是的 - log4j 可以在包级别设置日志记录级别。它还支持“关闭”级别。 谢谢,我希望我能批准这个答案,但这是评论.. 【参考方案1】:

你应该使用:

log4j.logger.foo = OFF

请注意,“foo”不需要是包或类,而是任意字符串。我们例如有一个名为“SQL”的记录器,可从许多类中调用。

【讨论】:

我想在 simplelog 中进行。但我认为将其更改为 log4j 是一种解决方案。 log4j 是世界上使用最多的日志框架。只要坚持每个人都在使用的东西,您就可以从插件、自定义附加程序、过滤器等中获益。 关键字是OFF,它在投票最多的答案中缺失。【参考方案2】:

如果你使用 Spring Boot,你可以在 application.properties 文件中设置为OFF。示例:

logging.level.org.springframework.amqp.rabbit.listener.SimpleMessageListenerContainer=OFF

参考: https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-logging.html#boot-features-custom-log-levels

【讨论】:

【参考方案3】:

使用 Commons Logging 中的 SimpleLog 需要两个配置文件,除非您使用某些系统属性。这些文件是:commons-logging.properties 和 simplelog.properties。 您指定的日志级别属性应放在 simplelog.properties 中,例如:

org.apache.commons.logging.simplelog.log.foo=warn

其中“foo”是记录器名称。通常,这是包或包和类名。在以下示例中,com.***.utils 包下的所有内容都设置为 info,而 com.***.servlet.Dispatcher 专门设置为 warn

org.apache.commons.logging.simplelog.log.com.***.utils=info 
org.apache.commons.logging.simplelog.log.com.***.servlet.Dispatcher=warn 

commons-logging.properties 文件应包含:

org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog

文档here 和here。

【讨论】:

我知道。问题是如何在 SimpleLog 中执行类似“log4j.logger. = DEBUG|INFO|OFF|WARN...”的操作。 我创建了一个小项目并测试了包级别的日志控制,它可以正常工作。我更新了我的示例以说明分层日志级别控制。如果它在您的环境中没有以这种方式工作,则可能没有检测到您的 simplelog.properties。当您更改其中的其他值时,它是否会影响输出(例如,使用 org.apache.commons.logging.simplelog.showdatetime=true/false 启用/禁用日期)?【参考方案4】:

在 Log4j 中,您可以为通过字符串标识的指定包、类或记录器指定日志记录级别。您只需将其写入 log4j.properties 文件即可:

log4j.logger.<your package> = DEBUG|INFO|OFF|WARN...

【讨论】:

我怎样才能在课堂上处理这个记录器?

以上是关于如何禁用类或整个包的记录器?的主要内容,如果未能解决你的问题,请参考以下文章

Log4j配置具有相同类或包的不同记录器级别

我可以使用 GhostDoc 将文档添加到整个类或代码文件吗?

如果发生异常,如何禁用记录 Kafka 批处理中的所有消息?

如何禁用 PyTorch-Lightning 记录器的日志记录?

如何在 syslog 中禁用 logstash 错误日志记录

如何禁用芹菜任务结果记录?