咱們在編寫代碼時,都知道在關鍵算法,邏輯性較強的地方添加註釋。一來提升了代碼的可維護性。二來讓代碼有了自可讀性。若是咱們把註釋理解爲靜態的自可讀性。那麼,程序在運行時,咱們如何才能知道程序的實際運行路徑呢?這就是今天的主角--日誌!算法
有不少朋友,不太喜歡打日誌。好幾百,甚至上千行的代碼。啪,啪,啪的全寫完!自信滿滿,一行日誌也沒打。聯調,測試,上線都沒問題。系統運行一段時間後,莫名的出現問題。那麼,究竟是哪一個地方出現問題了?方法的入參是什麼?系統走到哪一步了?一無所知。這下就只剩抓瞎了。從這裏咱們應該能夠看出,打日誌是很是有必要的。咱們梳理一下,打日誌有諸多好處。api
最後: 記錄日誌是給本身分析問題,解決bug用的。咱們儘可能記錄的儘量簡潔,易懂以及清晰,理想狀況下甚至能經過日誌還原一次請求,一次調用的全過程。服務器
上面咱們說了爲何須要打日誌。如今咱們說說,如何打日誌。以咱們最經常使用slf4j這個日誌組件來講,它對應的日誌級別有: trace, debug,info,warn,error這五個日誌級別。其範圍依次爲: error>warn>info>debug>trace。微信
咱們在平常開發中:框架
以log4j+slf4j-api爲例:性能
pom.xml依賴:單元測試
<dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.25</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.25</version> <scope>test</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
如下打日誌例子:測試
import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LogTest { private static Logger logger = LoggerFactory.getLogger(LogTest.class); @Test public void testLog(){ String name="andyqian"; String blog = "www.andyqian.com"; //就日誌 logger.debug("name: {} and blog : {} ", name, blog); } }
咱們經過佔位符的形式,記錄日誌。不建議使用字符串拼接的形式來記錄日誌。spa
在Java中,常見的日誌框架有.net
在平常的開發中,咱們一般都是經過Slf4j+的實現。以上述案例中,咱們就說到了(slf4j+log4j的形式)。在實際使用中,咱們也能夠經過slf4j+ logback日誌的形式作爲日誌組合。
ps:各個日誌框架的性能不在本文討論之中。有興趣的童鞋,可自行測試。
有好幾天沒有寫文章了,手有點生。閒暇時翻翻本身記錄下來的文章,就像光着腳丫在沙灘上奔跑了許久後,時而回頭還能看到被海水沖淡的腳印同樣。也以爲挺有意思!
相關閱讀:
《說說單元測試》
《一個Java細節》
掃碼關注,一塊兒進步
我的博客: http://www.andyqian.com