【问题标题】:Verbose logging during testing but terse logging in the released application测试期间的详细日志记录,但在发布的应用程序中的简洁日志记录
【发布时间】:2015-01-24 04:02:02
【问题描述】:

我正在制作一个基于 Maven 的 java 库,使用的日志记录是这样的:

    import java.util.logging.Logger;
    private static final Logger LOG 
        = Logger.getLogger(MyLibraryClass.class.getName())

我在这个库中编写了很多日志,这对于调试库的流程非常有用,特别是在 JUnit 测试期间,但是我创建的这个应用程序,我不希望它向客户端应用程序显示日志(将使用此库的应用程序)。因为它太冗长了。

如何控制哪些登录到客户端应用程序的日志视图。来自库的 INFO level 之类的日志不一定会显示在客户端/示例应用程序中?

这是我的最终目标:

  • 在运行单元测试时尽可能详细地记录日志 图书馆项目
  • 但不向客户端应用程序显示这些“详细”日志,而不需要客户端应用程序故意配置/禁止来自库的日志

客户端库 - 是 Java 应用程序使用的项目;这是我正在做的项目。这会生成不应在客户端应用程序中显示的日志。

客户端应用程序 - 是使用 Java 的项目/应用程序 图书馆

【问题讨论】:

标签: java unit-testing logging


【解决方案1】:

客户端应用需要自己的测试。我不明白如果客户端应用程序出现问题(只是一个死胡同),为什么不应该释放客户端库。

我看到了两个 Maven 项目。

  • 图书馆(带有图书馆测试)
  • 依赖于库的客户端应用(带有客户端应用测试)

所以你在库中有一个 noop-config-file

/src/test/java/resources/logging.properties 

在客户端应用程序中有一个 noop-config-file

/src/main/java/resources/logging.properties

这样的 noop-config 看起来像这样:

handlers= java.util.logging.ConsoleHandler
level= SEVERE

【讨论】:

  • 这是 log4j.properties 文件的内容,而不是 logging.properties 的内容
【解决方案2】:

我不确定你是否正在寻找这个

 LOGGER.setLevel(Level.INFO); 

【讨论】:

    【解决方案3】:

    在 log4j.properties 或 log4j.xml 中配置日志级别

    为您的单元测试使用单独的 log4j.properties。

    在 maven 中将 log4j.properties 或 log4j.xml 文件放入 src/test/resources

    或者在运行 junit 时使用 CLI 属性

    -Dlog4j.configuration=<path to properties file>
    

    【讨论】:

      【解决方案4】:

      您将日志消息的优先级过高。所有 INFO、WARN 和 ERROR 消息都应该是您希望用户看到的消息。如果一条消息只对开发人员有用,它应该是 DEBUG 或 TRACE。然后将您的日志库配置为仅显示 INFO、WARN 和 ERROR 消息。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-15
        • 2013-03-12
        • 2020-08-18
        • 1970-01-01
        • 2017-03-13
        • 1970-01-01
        • 2012-12-15
        • 1970-01-01
        相关资源
        最近更新 更多