更改记录器实例的全局设置

2022-08-31 20:02:41

我使用java.util.logging.Logger作为我的应用程序的日志记录引擎。每个类都使用自己的记录器,即每个类都有:

private final Logger logger = Logger.getLogger(this.getClass().getName());

我想为我的所有类设置一个日志记录级别,并能够更改它(即,将设置放在一个地方)。有没有办法做到这一点,除了使用全局变量并手动设置每个记录器?Level


答案 1

一种简单的方法是使用日志记录属性文件,方法是包含以下 VM 参数:

-Djava.util.logging.config.file="logging.properties" 

其中“logging.properties”是包含日志记录配置的文件的路径。对于相对路径,进程的工作目录非常重要。

在该文件中,包括如下行:

.level= INFO

这将设置全局级别,可以为特定处理程序和记录器重写全局级别。例如,可以像这样覆盖特定记录器的级别:

 com.xyz.foo.level = SEVERE

您可以从 jre6\lib\logging.properties 获取日志记录属性文件的模板。


答案 2

正如 Andy 所回答的,在大多数情况下,您应该使用属性文件和 VM 参数,因此它独立于您的代码。

但是,如果您出于某种原因想要以编程方式进行(我自己在一种情况下有一个很好的理由),您也可以像这样访问Handlers:

Logger rootLogger = LogManager.getLogManager().getLogger("");
rootLogger.setLevel(Level.INFO);
for (Handler h : rootLogger.getHandlers()) {
    h.setLevel(Level.INFO);
}

编辑我将 setLevel 添加到根记录器中,正如 searchengine27 在他的答案中指出的那样。

处理程序是文件或控制台处理程序,您通过属性或编程方式设置它们。

或者像这样更改过滤器:

Logger rootLogger = LogManager.getLogManager().getLogger("");
rootLogger.setFilter(new Filter() {
    @Override
    public boolean isLoggable(LogRecord record) {
            return "something".equals(record.getLoggerName());
    }
});

推荐