log.info不报错也不打印变量内容原因:缺少占位符 { }
约 375 字大约 1 分钟
2025-07-11
起因
使用 hutool 的 JSONUtil.parse()
时发现打印不出变量内容,但是也不报错,只是空白。
错误代码
JSONObject firmwareSystemDTO= JSONUtil.parseObj(jsonStr);
log.info("firmwareSystemDTO: ",firmwareSystemDTO);
打印结果只有前面的字符串
firmwareSystemDTO:
考虑了使用错误、语法错误等多方面的因素后,还是不能打印出结果。
发现错误
询问 AI 之后发现问题不在 json 解析,而在 log.info 的打印。
Slf4j、Log4j 等日志框架要求使用 {}
占位符明确参数位置。若未添加占位符,参数会被忽略。
// ❌ 错误写法:缺少占位符
log.info("firmwareSystemDTO: ", firmwareSystemDTO);
// ✅ 正确写法:添加占位符
log.info("firmwareSystemDTO: {}", firmwareSystemDTO);
因为在 js 中占位符和普通字符串颜色不同,所以我没考虑过别的实例代码中的 {}
是占位符,导致不小心删掉之后也没有发现错误。
注意事项:
js 打印时字符串和变量用 ,
和 +
连接都可以
java 用 System.out.println
打印时字符串和变量用必须用 +
(用 ,
会报错)
java 用 log.info
打印时 ,
和 +
都不报错
- 用
,
连接时一定要用占位符{}
- 用
+
连接时可以不用占位符{}
log.info("deviceName: ", deviceName);//打印不出deviceName内容
log.info("deviceName: {} ", deviceName);//正常打印
log.info("productName: {} "+ productName);//正常打印
log.info("productName: "+ productName);//正常打印