java - log.info (“dsasdds {}” , var) 和 log.info (“dsasdds ” + var) 之间的区别?

标签 java logging log4j2

之前我通常使用log.info(“dsasdds ” + var)添加日志,但现在,在我的新工作场所,我看到每个人都使用 log.info(“dsasdds {}”, var)打印日志的方法?这两种方式在内部工作方式上有什么显着差异吗?

最佳答案

这取决于日志中打印的变量的计算。
假设 var.toString() 相对昂贵,并且当前记录器没有启用 info 级别,通过使用 log.info(“dsasdds ” + var) 由于没有写入日志,因此计算了“无”相对昂贵的操作。
使用 log.info(“dsasdds {}”, var) 时,仅当当前记录器的级别与请求的级别匹配时才会调用 var.toString() ( 信息在这里)。
对于表达式,suppliers (that are lazily evaluated) is also a possibility :

logger.trace("Some long-running operation returned {}", () -> expensiveOperation());

现在使用系统地惰性计算表达式/变量是一个好习惯吗? 不一定,但这不会损害您示例中的可读性。

关于java - log.info (“dsasdds {}” , var) 和 log.info (“dsasdds ” + var) 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587651/

相关文章:

java - 将 Spring Boot 应用程序部署到 heroku - 错误消息 "No web processes running"

Java:不可变类的伪setter方法

logging - AWS Cloudwatch 指标过滤器 : are they actually case-insensitive?

c# - C# 日志记录的性能技巧

python - 解析大文本文件并提取数据而不循环多次 - Python

java - 用于具有依赖关系的相同类型的多个 bean 的单个 JavaConfig 类

java - 将时间重置为午夜会减去一天

xml - 使用控制台和文件附加器的非常简单的 log4j2 XML 配置文件

java - Jetty 服务器上的 Log4j2 和 Flume

Log4j2每日日志文件