如何配置J.U.L.在JUnit测试期间记录?

时间:2017-03-14 14:44:50

标签: java logging junit log4j java.util.logging

我有同样的问题:How to set the log level to DEBUG during Junit tests? - 除了我正在使用java.util.logging,而不是Log4j。

具体来说,我正在将现有的(Maven构建的)应用程序从Log4j转换为java.util.logging,以符合客户要求(不可协商)。一切都使用SLF4J,因此代码更改很少。有超过一千个测试类,分布在几个模块中;我们目前在这些模块的log4j.properties中有一个src/test/resources文件来自定义测试的日志输出。

我认为日志输出很容易为测试定制:如果开发人员打破测试并想要读取日志输出,我宁愿他们在本地调整日志配置而不是开始搞乱(精心挑选)代码中的日志级别,导致“一切记录在信息”综合症。请注意,我希望测试日志配置适用于“在测试条件下执行时的测试+应用程序代码”。

由于测试数量众多,我不想将日志设置添加到每个Test类(如此处所建议的那样:How to set the Loglevel for a JUnit Test)。这似乎是错误的解决方案。我也不想编辑JVM的logging.properties文件,因为这会影响一切。这个应用程序不是我唯一做的事情。我还必须让其他人做出同样的改变。

现有系统正常工作,因为Log4j从类路径中选取/log4j.properties是否有java.util.logging的等效机制?

当前的想法:添加logging.properties文件来替换现有配置,并尝试破解Maven配置以设置java.util.logging.config.file参数指向它。有更简洁的方式吗?

2 个答案:

答案 0 :(得分:2)

可以使用@BeforeClass方法中的一行,通过src/test/resources/logging.properties系统属性专门为单元测试设置项目范围java.util.logging.config.file

System.setProperty("java.util.logging.config.file", ClassLoader.getSystemResource("logging.properties").getPath());

答案 1 :(得分:1)

  

有更简洁的方法吗?

这可能是最reliable method to set the logging configuration

  

是否有java.util.logging的等效机制?

配置选项列在java.util.logging.LogManager文档中。你可以:

  1. 设置java.util.logging.config.file属性并使用属性文件。
  2. 设置java.util.logging.config.class属性并使用无参数构造函数创建一个类文件,以执行您希望手动配置记录器的任何代码。
  3. 使用LogManager.readConfiguration(InputStream)ClassLoader.getResourceAsStream(String)加载新配置。此逻辑也可以与java.util.logging.config.class属性结合使用。