【问题标题】:What is the best way to display the following details in org.slf4j.Logger?在 org.slf4j.Logger 中显示以下详细信息的最佳方式是什么?
【发布时间】:2020-11-05 07:26:06
【问题描述】:

在 org.slf4j.Logger 中显示以下详细信息的最佳方式是什么

logger.info(problemCount + " problem entries deleted for the Object: " + id );

这是信息,我想暂时显示这些更详细的信息,以便通过查看日志来帮助解决问题。

我知道有一些参考资料说应该使用内置字符串格式而不是像下面这样的字符串连接

logger.info(String.format("%d problem entries deleted for the Object: %s ",problemCount, id));

有没有一种高效的方法可以使用 org.slf4j.Logger 在 java 中编写这类日志语句?

请参阅下面的链接,了解为什么根据效率和性能首选 answer

Logger slf4j advantages of formatting with {} instead of string concatenation

【问题讨论】:

    标签: java logging slf4j


    【解决方案1】:

    首先:SLF4J 是:

    Java 的简单日志外观 (SLF4J) 用作各种日志框架(例如 java.util.logging、logback、log4j)的简单外观或抽象,允许最终用户在部署时插入所需的日志框架。

    所以实际上是 SLF4J 背后的实现或多或少地提高了效率。

    但是,使用占位符{} 的重点是在记录器决定是否记录任何内容之前没有进行评估。

    如果你喜欢这样:

    logger.info(problemCount + " problem entries deleted for the Object: " + id );
    

    始终进行字符串连接。

    但是这样做:

    logger.info( "{} problem entries deleted for the Object: {}",problemCount , id );
    

    让记录器决定是否完成了任何连接或更复杂的事情。

    因此 - 例如 - 如果您的日志级别为 warn 并且您记录 info 则不会进行任何连接或任何其他评估,从而使后者更有效。 p>

    【讨论】:

      【解决方案2】:

      是的,你也可以这样做

      logger.info( "{} problem entries deleted for the Object: {}",problemCount , id );
      

      【讨论】:

      • 这是有效的方法吗?
      • 一两句话简要解释为什么你的解决方案更可取,将对提问者和未来的读者有很大帮助。
      • @Eritrean 你是说解释一下答案吗?,比如它是如何工作的
      • @RahulKumar 请参阅this 发布为什么首选这种方法。
      • @MadhuTomy 您可以参考他在 cmets 中分享的厄立特里亚链接,帮助您更好地理解为什么它是一种有效的方式?
      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      相关资源
      最近更新 更多