0%

日志使用占位符还是直接拼接

在开发和生产环境,我们经常依赖log来帮我们定位问题,这时候会使用不用的log级别,debug,info,warn,error等。今天在和同事讨论的过程中,聊到了日志占位符的问题。
以及使用占位符的优点,然后自己简单做了一下性能测试,加深了对占位符的理解。

占位符和直接拼接的性能比较

通过main方法for循环测试占位符和直接拼接10w次以后的用时,发现直接性能拼接的耗时较短;那么这样可以得到一个简单的结论,拼接耗时短,性能表面上看要比占位符性能高。
既然这样的话,我们为什么不直接使用拼接,反而越来越多的框架选择使用了占位符。

从实际出发

回到项目,一般项目里面有很多debug级别的日志,可以帮助我们快速定位线上问题,提交生产解决问题的效率,但是一般线上的日志级别会比较高,debug是不会打印的,这个时候就出现了一个问题,拼接的时候会进行内存空间的开辟,stringbuilder进行拼接,但是进入日志断点后,发现并不需要进行日志打印,这部分的开销就变的没有意义,而使用占位符的时候,只有需要打印的时候才会进行拼接,减少了内存的开销,性能得到了提升。

最后

使用占位符是一个最佳实践,当然我觉得还是要根据实际的情况,如果确定100%需要进行日志打印,而且日志级别较高,我觉得直接拼接是更好的选择,不过如果公司有规范的话,还是按照规范来执行。