在Java開發中,無論是運行還是調試,一般都會對異常進行處理,一則明確問題出在哪個地方,一則也是代碼完整性的一部分。談到log日誌,小編建議初學java的朋友使用框架集成的log4j、logback這類統一打印日誌,儘量不使用catch的e.printStackTrace(),爲什麼呢?下面我們來做簡單介紹。
爲什麼儘量不用e.printStackTrace
直接用e.printStackTrace來打印日誌有錯嗎?當然不錯,但是不好。主要原因有以下幾點:
1、佔用太多內存,造成鎖死
要打印字符串輸出到控制檯上,需要字符串常量池所在的內存塊有足夠的空間。然而,因爲e.printStackTrace() 語句要產生的字符串記錄的是堆棧信息,太長太多,內存被填滿了!大量線程產出字符串產出到一半,等待有內存被釋放,鎖死了,導致整個應用掛掉了。
2、日誌交錯混合,不易讀
從開始學習java,老師就教我們寫代碼要具有可讀性,易讀性。同樣,日誌的輸出如果不具有易讀性,也是讓程序員非常頭疼的一件事。那麼爲什麼e.printStackTrace輸出的日誌具有不易讀性了呢?
printStackTrace()默認使用了System.err輸出流進行輸出,與System.out是兩個不同的輸出流,那麼在打印時自然就形成了交叉。再就是輸出流是有緩衝區的,所以對於什麼時候具體輸出也形成了隨機。
Log4j的使用
1、首先,引入log4j.jar,在web.xml中配置log4j的訪問配置。
2、在log4j.properties中配置log4j的輸出級別信息
3、在action中定義log
private Logger log = Logger.getLogger(HomeAction.class);
log.info("這裏就可以寫入日誌信息了");