我遇到了与此类似的问题:如何在Junit测试期间将日志级别设置为DEBUG?——但我使用的是`java.util.logging`而不是Log4j。
具体来说,我正在将一个现有的(使用Maven构建的)应用程序从Log4j转换为`java.util.logging`,以满足客户要求(不可协商)。一切都使用SLF4J,所以代码更改很小。有数千个测试类,分布在几个模块中;我们目前在这些模块的`src/test/resources`中有一个`log4j.properties`文件,用于自定义测试日志输出。
我认为对于测试日志输出来说易于定制非常重要:如果开发人员破坏了测试并想要阅读日志输出,我希望他们本地调整日志配置,而不是开始乱改(精心选择的)代码中的日志级别,导致“所有信息都记录在info级别”综合症。请注意,我希望测试日志配置适用于“在测试条件下执行时的测试+应用程序代码”。
我不想为每个测试类添加日志设置(如此处所建议:如何为JUnit测试设置日志级别),因为测试数量很大。这似乎不是正确的解决方案。我也不想编辑JVM的`logging.properties`文件,因为那会影响到整个系统。这个应用程序不是我唯一要做的事情。我还必须让其他人做出相同的改变。
现有的系统之所以有效果,是因为Log4j从类路径中获取`/log4j.properties`。`java.util.logging`是否有等效的机制? 目前的想法:添加一个`logging.properties`文件来替换现有配置,并尝试修改Maven配置,将`java.util.logging.config.file`参数设置为指向它。还有更简洁的方法吗?
具体来说,我正在将一个现有的(使用Maven构建的)应用程序从Log4j转换为`java.util.logging`,以满足客户要求(不可协商)。一切都使用SLF4J,所以代码更改很小。有数千个测试类,分布在几个模块中;我们目前在这些模块的`src/test/resources`中有一个`log4j.properties`文件,用于自定义测试日志输出。
我认为对于测试日志输出来说易于定制非常重要:如果开发人员破坏了测试并想要阅读日志输出,我希望他们本地调整日志配置,而不是开始乱改(精心选择的)代码中的日志级别,导致“所有信息都记录在info级别”综合症。请注意,我希望测试日志配置适用于“在测试条件下执行时的测试+应用程序代码”。
我不想为每个测试类添加日志设置(如此处所建议:如何为JUnit测试设置日志级别),因为测试数量很大。这似乎不是正确的解决方案。我也不想编辑JVM的`logging.properties`文件,因为那会影响到整个系统。这个应用程序不是我唯一要做的事情。我还必须让其他人做出相同的改变。
现有的系统之所以有效果,是因为Log4j从类路径中获取`/log4j.properties`。`java.util.logging`是否有等效的机制? 目前的想法:添加一个`logging.properties`文件来替换现有配置,并尝试修改Maven配置,将`java.util.logging.config.file`参数设置为指向它。还有更简洁的方法吗?
@BeforeClass
中使用它。你可能也可以在测试套件中设置一些东西,但我只需要一个一行代码的东西,让我在运行单元测试时控制日志级别。你只需要一个logging.properties
文件,但你也可以按类别进行设置,只需更改资源名称或使用this.getClass().getResourceAsStream('logging.properties')
或类似的东西即可。至于比其他方法更好/更差,我使用 Ivy 而不是 Maven,并且我喜欢在 JUnit 和 Ivy 之间保持清晰的分离。 - Parker