求求別再這麼用log4x了

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

log4x的用法

可能不少人的用法僅限於,設置一個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變量。
但願看到這篇文章的朋友,再也不疑惑。


微信,加好友,不用付款
二維碼

相關文章
相關標籤/搜索