我有同样的问题: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
参数指向它。有更简洁的方式吗?
答案 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文档中。你可以:
java.util.logging.config.file
属性并使用属性文件。java.util.logging.config.class
属性并使用无参数构造函数创建一个类文件,以执行您希望手动配置记录器的任何代码。java.util.logging.config.class
属性结合使用。