【问题标题】:How to configure J.U.L. logging during JUnit tests?如何配置 J.U.L.在 JUnit 测试期间记录?
【发布时间】:2017-08-04 23:18:56
【问题描述】:

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

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

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

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

现有系统可以正常工作,因为 Log4j 从类路径中选择了/log4j.propertiesjava.util.logging 是否有等效机制?

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 当你说“在你的@BeforeClass 方法中”时——我想我需要在每个测试类中都这样做,对吗?这比在 pom 中的 surefire 配置中设置它更好吗?
    • @SusanW 是的,@BeforeClass 中的每个测试类都需要它。您也可以在测试套件中设置一些东西,但我所需要的只是一个单行程序,它可以让我在运行单元测试时控制日志记录级别。您只需要一个 logging.properties 文件,但您也可以在每个类的基础上执行此操作,只需更改资源名称或使用 this.getClass().getResourceAsStream('logging.properties') 或类似的东西。就比其他方法更好/更差而言,我使用 Ivy 而不是 Maven,并且我更喜欢在 JUnit 和 Ivy 之间保持清晰的分离。
    【解决方案2】:

    有没有更简洁的方法?

    这可能是最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 属性结合使用。

    【讨论】:

    • 感谢您的回答!希望这周我能尝试一下,如果我能摆脱分心的阴云……
    • 好的,我终于开始使用它了,我在项目范围的 pom 中配置了 Maven,将java.util.logging.config.file 系统属性添加到了surefire。我会在我的问题中添加注释以显示详细信息。谢谢!
    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 2014-05-21
    • 1970-01-01
    • 2021-02-28
    • 1970-01-01
    • 2016-12-11
    • 1970-01-01
    相关资源
    最近更新 更多