在開發和生產環境,我們經常依賴log來幫我們定位問題,這時候會使用不用的log級別,debug,info,warn,error等。今天在和同事討論的過程中,聊到了日志占位符的問題。
以及使用占位符的優點,然后自己簡單做了一下性能測試,加深了對占位符的理解。
占位符和直接拼接的性能比較
通過main方法for循環測試占位符和直接拼接10w次以后的用時,發現直接性能拼接的耗時較短;那么這樣可以得到一個簡單的結論,拼接耗時短,性能表面上看要比占位符性能高。
既然這樣的話,我們為什么不直接使用拼接,反而越來越多的框架選擇使用了占位符。
從實際出發
回到項目,一般項目里面有很多debug級別的日志,可以幫助我們快速定位線上問題,提交生產解決問題的效率,但是一般線上的日志級別會比較高,debug是不會打印的,這個時候就出現了一個問題,拼接的時候會進行內存空間的開辟,stringbuilder進行拼接,但是進入日志斷點后,發現并不需要進行日志打印,這部分的開銷就變的沒有意義,而使用占位符的時候,只有需要打印的時候才會進行拼接,減少了內存的開銷,性能得到了提升。
最后
使用占位符是一個最佳實踐,當然我覺得還是要根據實際的情況,如果確定100%需要進行日志打印,而且日志級別較高,我覺得直接拼接是更好的選擇,不過如果公司有規范的話,還是按照規范來執行。