如何配置 J.U.L。在 JUnit 测试期间记录?
How to configure J.U.L. logging during JUnit tests?
我遇到了与此相同的问题: - 除了我使用的是 java.util.logging
,而不是 Log4j。
具体而言,我正在将一个现有的(Maven 构建的)应用程序从 Log4j 转换为 java.util.logging
,以符合客户要求(不可协商)。一切都使用 SLF4J,因此代码更改很少。有超过一千个测试 classes,分布在几个模块中;我们目前在这些模块的 src/test/resources
中有一个 log4j.properties
文件来自定义测试的日志输出。
我认为日志输出可以很容易地为测试定制是很重要的:如果开发人员破坏了测试并想要读取日志输出,我宁愿他们在本地调整日志配置而不是开始搞乱(小心选择)代码中的日志级别,导致 "everything logged at info" 综合症。请注意,我希望测试日志配置应用于 "the test+application code when executed under test conditions".
我不想为每个测试添加日志设置 class(如此处建议:How to set the Loglevel for a JUnit Test),因为有大量测试。这似乎是错误的解决方案。我也不想去编辑 JVM 的 logging.properties
文件,因为那会影响一切。这个应用程序不是我唯一做的事。我还必须让其他人做出相同的更改。
现有系统可以工作,因为 Log4j 从 class 路径中获取 /log4j.properties
。 是否有 java.util.logging
的等效机制?
目前的想法:添加一个 logging.properties
文件来替换现有的配置,并尝试破解 Maven 配置以设置 java.util.logging.config.file
参数指向它。有没有更简洁的方法?
Is there a neater way?
这可能是最多的 reliable method to set the logging configuration。
Is there an equivalent mechanism for java.util.logging
?
java.util.logging.LogManager 文档中列出了配置选项。您可以:
- 设置
java.util.logging.config.file
属性 并使用属性文件。
- 设置
java.util.logging.config.class
属性 并创建一个 class 文件,其中包含无参数构造函数以执行您希望手动配置记录器的任何代码。
- 使用LogManager.readConfiguration(InputStream) and ClassLoader.getResourceAsStream(String)加载新配置。这个逻辑也可以与
java.util.logging.config.class
属性 组合。
一个项目范围的 src/test/resources/logging.properties
can be set specifically for unit testing via the java.util.logging.config.file
系统 属性 在你的 @BeforeClass
方法中使用一行:
System.setProperty("java.util.logging.config.file", ClassLoader.getSystemResource("logging.properties").getPath());
我遇到了与此相同的问题:java.util.logging
,而不是 Log4j。
具体而言,我正在将一个现有的(Maven 构建的)应用程序从 Log4j 转换为 java.util.logging
,以符合客户要求(不可协商)。一切都使用 SLF4J,因此代码更改很少。有超过一千个测试 classes,分布在几个模块中;我们目前在这些模块的 src/test/resources
中有一个 log4j.properties
文件来自定义测试的日志输出。
我认为日志输出可以很容易地为测试定制是很重要的:如果开发人员破坏了测试并想要读取日志输出,我宁愿他们在本地调整日志配置而不是开始搞乱(小心选择)代码中的日志级别,导致 "everything logged at info" 综合症。请注意,我希望测试日志配置应用于 "the test+application code when executed under test conditions".
我不想为每个测试添加日志设置 class(如此处建议:How to set the Loglevel for a JUnit Test),因为有大量测试。这似乎是错误的解决方案。我也不想去编辑 JVM 的 logging.properties
文件,因为那会影响一切。这个应用程序不是我唯一做的事。我还必须让其他人做出相同的更改。
现有系统可以工作,因为 Log4j 从 class 路径中获取 /log4j.properties
。 是否有 java.util.logging
的等效机制?
目前的想法:添加一个 logging.properties
文件来替换现有的配置,并尝试破解 Maven 配置以设置 java.util.logging.config.file
参数指向它。有没有更简洁的方法?
Is there a neater way?
这可能是最多的 reliable method to set the logging configuration。
Is there an equivalent mechanism for
java.util.logging
?
java.util.logging.LogManager 文档中列出了配置选项。您可以:
- 设置
java.util.logging.config.file
属性 并使用属性文件。 - 设置
java.util.logging.config.class
属性 并创建一个 class 文件,其中包含无参数构造函数以执行您希望手动配置记录器的任何代码。 - 使用LogManager.readConfiguration(InputStream) and ClassLoader.getResourceAsStream(String)加载新配置。这个逻辑也可以与
java.util.logging.config.class
属性 组合。
一个项目范围的 src/test/resources/logging.properties
can be set specifically for unit testing via the java.util.logging.config.file
系统 属性 在你的 @BeforeClass
方法中使用一行:
System.setProperty("java.util.logging.config.file", ClassLoader.getSystemResource("logging.properties").getPath());