Java Logger:无法在logger.properties文件中设置日志级别

我有一个java项目,我使用maven来构建。 我在我的项目中使用java.util.logging.Logger ,并希望使用logger.properties文件(而不是命令行)进行配置。

我创建了一个logger.properties文件,如下所示:

 handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler .level=WARNING java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n java.util.logging.config.file="../../results/api.log" 

以下是我遇到的问题:

  1. java.util.logging.SimpleFormatter.format正在工作 。 当我在这里更改格式时,我会在项目中立即看到更改。 所以我知道至少我正在导入文件。
  2. .level不工作 。 我已经尝试将其更改为infofinestwarning等,但在我更改之后,即使我告诉它不显示INFO,我仍然会看到所有的INFO消息。
  3. java.util.logging.config.file无效 。 我有点期望这个不起作用,因为它是一个相对的路径。 任何人都知道我如何解析属性文件中的相对路径名?

我需要将.level移动到顶部,如下所示:

logger.properties

 .level=WARNING handlers=java.util.logging.FileHandler, java.util.logging.ConsoleHandler java.util.logging.SimpleFormatter.format=[%4$s] %5$s %n 

然后,为了将结果保存到“api.log”,我在我的代码中执行了此操作:

RequestHelper.java

 import org.apache.commons.io.FilenameUtils; public class RequestHelper { private static final Logger LOGGER = Logger.getLogger( RequestHelper.class.getName() ); protected RequestHelper() { //SET LOGGER TO OUTPUT TO "../../results/api.log" //Logs will ALSO output to console. String result_file = getNormalizedAbsolutePath("../../results/api.log"); Handler fh = new FileHandler(result_file); Logger.getLogger("").addHandler(fh); } public static String getNormalizedAbsolutePath(String fileName) { String path; File file = new File(fileName); try { path = file.getCanonicalPath(); } catch (IOException e) { LOGGER.warning("Error while computing the canonical path of file: " + fileName); path = file.getAbsolutePath(); } return FilenameUtils.normalize(path); } } 

只是一个猜测。 从文档:

名称以“.level”结尾的所有属性都假定为Loggers定义日志级别。 因此,“foo.level”为命名层次结构中的任何子项定义了一个名为“foo”和(递归)的记录器的日志级别。 日志级别按属性文件中定义的顺序应用。 因此,树中子节点的级别设置应该在其父级的设置之后进行。

在定义任何处理程序之前,请先尝试设置.level 。 如果先设置根记录器级别,则之后定义的记录器将inheritance根日志级别。

也:

属性“config”。 此属性旨在允许运行任意配置代码。

java.util.logging.config.file是系统属性,在配置文件中不起作用。 尝试使用“配置”。