一、示例代码
public static void main(String[] args) { ProvinceCityInfo provinceCityInfo = new ProvinceCityInfo(); provinceCityInfo.setCityId(1); provinceCityInfo.setCityName("北京"); log.info("provinceCityInfo is {}", JSON.toJSONString(provinceCityInfo)); if (log.isInfoEnabled()) { log.info("provinceCityInfo is {}", JSON.toJSONString(provinceCityInfo)); } log.info("provinceCityInfo is {}" + JSON.toJSONString(provinceCityInfo)); }
二、log.isInfoEnabled()
1. log.info("provinceCityInfo is {}", JSON.toJSONString(provinceCityInfo)); 编译后其实是两行代码,先把对象序列化为JSON字符串,再打印
2. 如果不加log.isInfoEnabled(),即使把日志级别跳到了WARN,不打印info,也会序列化对象为JSON字符串
3. 加上了log.isInfoEnabled(),只是做了一次判断,比序列化性能高
三、log.info拼接字符串后再打印和使用占位符的区别
1. 拼接字符串底层使用了StringBuilder,然后使用log.info(String s)打印
2. 直接使用占位符,使用log.info(String format, Object o)打印
3. 至少在代码层面,拼接字符串更耗费性能
原文:https://www.cnblogs.com/june0816/p/14246024.html