You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Log4j中字符串拼接性能优化:为何推荐用{}替代字符串拼接?

日志记录最佳实践:为啥要弃用字符串拼接改用占位符?

你肯定在日志规范里听过这条:别用字符串拼接来组装日志消息,改用{}占位符!我之前特意去研究了Log4j的源码,发现它内部处理日志格式化的逻辑,刚好对应了这个最佳实践。

比如它有个format()方法,专门负责把模式和参数组合成最终的日志消息,源码片段是这样的:

/**
 * 使用类SLF4J的格式化器格式化参数。
 * @param pattern 模式,可能格式有误。
 * @param arguments 参数。
 * @return 格式化后的日志消息
 */
public String format(String pattern, Object... arguments) {
    // 内部调用SLF4J的格式化逻辑,仅在需要输出日志时才完成参数替换
    return MessageFormatter.arrayFormat(pattern, arguments).getMessage();
}

为啥这种方式比字符串拼接好?核心原因在于性能优化:如果当前日志级别没开启(比如你设置了INFO级别,但代码里打了DEBUG日志),用字符串拼接的话,拼接操作还是会执行完,白白浪费CPU和内存;但用占位符的话,只有当日志确实要被输出的时候,才会执行参数替换的格式化操作,避免了无用的性能消耗。

而且这种写法也更简洁易读,不用写一堆+号拼接字符串,后续维护起来也更省心。

内容的提问来源于stack exchange,提问作者ninja.coder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:29:08