我知道 OP 已经要求以编程方式完成,但这里提供一个在属性文件中完成的示例。
注意:我认为这很值得包含,因为标题没有表明是以编程方式,许多开发人员希望通过 logging.properties 进行管理。此外,在线上关于此的信息不是很多,可能会让人感到困惑,与 log4j 稍有不同。
根日志级别由 .level
配置指定。这决定了默认情况下要捕获和“分配”日志记录的事件。根日志级别是日志层次结构中“根记录器”使用的级别。请参见 this onjava article 了解更多关于日志层次结构的信息。
下面,根日志级别设置为 WARNING,因此通常只会捕获 WARNING 事件。这被所有子记录器继承,除非您稍后进行配置:
.level=WARNING
这个记录级别仅指示了被捕获的内容,而不是“分发”的内容。被捕获的事件(消息)如何分发取决于与记录器相关联的处理程序。例如,ConsoleHandler会将事件输出到控制台。例如:
java.util.logging.ConsoleHandler.level = WARNING
此ConsoleHandler.level指示处理程序应分发或打印消息的级别。因此,如果使用上述配置收到FINE消息,则此处理程序将不会将其打印出来。但它会打印任何具有WARNING日志级别或更高级别的消息。
将其设置为ALL将确保ConsoleHandler将所有消息都打印到控制台(我们还需要配置根级别以确保所有消息都被捕获):
.level=ALL
java.util.logging.ConsoleHandler.level = ALL
然而,这将会产生很多我们不希望的噪音。因此,为了将 FINE 级别的事件减少到我们感兴趣的那些类别,我们仅更改这些特定记录器的日志级别:
com.level = WARNING
com.mypackage.MyClass1.level = FINE
com.mypackage.MyClass2.level = FINE
com.mypackage.mysubpackage.MyClass3.level = FINE
请注意,上述代码中,我已经明确将“com”记录器的级别设置为WARNING。