sl4j或者log4j中,推薦的記錄方式是:微信
private Logger log = Logger.getLogger(getClass()); //或者 private static final Logger log = Logger.getLogger(XXX.class); //調用 log.debug(); log.info();
而後不少人就以爲不爽了,這特麼這裏聲明一個log變量,那裏聲明一個log變量,多傻呀,因而就產生了下面的記錄方式:app
LogHelper.debug();//或者LogUtil.debug() LogHelper.info();
在這裏,我不是針對誰,這麼用的人,根本沒有掌握log4x的意義所在!!!性能
最開始,是Console.Write,打印到控制檯,看看內容是什麼debug
console有兩個弊端:
1)影響正常的輸出——生產版本須要將這些打印代碼去掉;
2)須要看的時候又一下刷過去了
因而變成文件記錄調試
發現有些信息放在一塊兒,老是從一大段無用的信息中去查找一些信息,因而產生了日誌級別,根據不一樣的級別,記錄到不一樣的地方
發現了Trace, Debug,Info, Warn, Error等級別。日誌
發現調試信息特別多,記錄起來沒什麼意義,要輸出還影響程序性能。
可是有些問題,只能在生產環境下重現問題。
因而一種能夠靈活控制日誌輸出的解決方案——log4x出現了。code
可能不少人的用法僅限於,設置一個root的log配置get
<root level="INFO"> <appender-ref ref="console" /> <appender-ref ref="rollingFile" /> </root>
但實際上,還有以下的方式it
<logger name="com.abc.www.LogTest" level="DEBUG" /> <logger name="com.abc.www" level="DEBUG" /> <logger name="com.abc" level="DEBUG" />
當有以下logger的實例時console
package com.abc.www; public class LogTest{ private Logger log = LoggerFactory.getLogger(getClass()); }
會優先尋找最匹配的logger配置
若是找到 name="com.abc.www.LogTest"
的logger配置,則使用該配置,不然往上找 name="com.abc.www"
的logger配置,一直到最終root配置。
這纔是log4x的最好用的地方!!!
因此,下面這種用法是否是有問題?
//LogHelper中 private static Logger log = LoggerFactory.getLogger("myLogger"); //使用 LogHelper.debug(); LogHelper.info();
之前我也疑惑log4j的用法,爲何要這麼用,爲何要定義這麼多log變量。
但願看到這篇文章的朋友,再也不疑惑。
微信,加好友,不用付款