更改记录器实例的全局设置
我使用java.util.logging.Logger作为我的应用程序的日志记录引擎。每个类都使用自己的记录器,即每个类都有:
private final Logger logger = Logger.getLogger(this.getClass().getName());
我想为我的所有类设置一个日志记录级别,并能够更改它(即,将设置放在一个地方)。有没有办法做到这一点,除了使用全局变量并手动设置每个记录器?Level
我使用java.util.logging.Logger作为我的应用程序的日志记录引擎。每个类都使用自己的记录器,即每个类都有:
private final Logger logger = Logger.getLogger(this.getClass().getName());
我想为我的所有类设置一个日志记录级别,并能够更改它(即,将设置放在一个地方)。有没有办法做到这一点,除了使用全局变量并手动设置每个记录器?Level
一种简单的方法是使用日志记录属性文件,方法是包含以下 VM 参数:
-Djava.util.logging.config.file="logging.properties"
其中“logging.properties”是包含日志记录配置的文件的路径。对于相对路径,进程的工作目录非常重要。
在该文件中,包括如下行:
.level= INFO
这将设置全局级别,可以为特定处理程序和记录器重写全局级别。例如,可以像这样覆盖特定记录器的级别:
com.xyz.foo.level = SEVERE
您可以从 jre6\lib\logging.properties 获取日志记录属性文件的模板。
正如 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());
}
});