log.info(“dsasdds {}”, var) 和 log.info(“dsasdds” + var) 的区别?
Difference between log.info(“dsasdds {}”, var) and log.info(“dsasdds ” + var)?
之前我一般都是用log.info(“dsasdds ” + var)
的方式来添加日志,但是现在,在我的新工作场所,我看到每个人都使用log.info(“dsasdds {}”, var)
的方式来打印日志?这两种方式在内部工作方式上有什么显着差异吗?
这取决于日志中打印的变量的计算。
假设 var.toString()
相对昂贵并且当前记录器未启用 info
级别,通过使用 log.info(“dsasdds ” + var)
为 "nothing" 计算了相对昂贵的操作,因为没有日志写了。
使用 log.info(“dsasdds {}”, var)
,仅当当前记录器的级别与请求的级别匹配时才会调用 var.toString()
(此处为 INFO
)。
对于表达式,suppliers (that are lazily evaluated) is also a possibility :
logger.trace("Some long-running operation returned {}", () -> expensiveOperation());
现在系统地使用惰性评估是一个好习惯 expressions/variables 吗?
不一定,但这不会影响您示例的可读性。
之前我一般都是用log.info(“dsasdds ” + var)
的方式来添加日志,但是现在,在我的新工作场所,我看到每个人都使用log.info(“dsasdds {}”, var)
的方式来打印日志?这两种方式在内部工作方式上有什么显着差异吗?
这取决于日志中打印的变量的计算。
假设 var.toString()
相对昂贵并且当前记录器未启用 info
级别,通过使用 log.info(“dsasdds ” + var)
为 "nothing" 计算了相对昂贵的操作,因为没有日志写了。
使用 log.info(“dsasdds {}”, var)
,仅当当前记录器的级别与请求的级别匹配时才会调用 var.toString()
(此处为 INFO
)。
对于表达式,suppliers (that are lazily evaluated) is also a possibility :
logger.trace("Some long-running operation returned {}", () -> expensiveOperation());
现在系统地使用惰性评估是一个好习惯 expressions/variables 吗? 不一定,但这不会影响您示例的可读性。