求求別再這么用log4x了


sl4j或者log4j中,推薦的記錄方式是:

 private Logger log = Logger.getLogger(getClass());
 //或者
 private static final Logger log = Logger.getLogger(XXX.class);

 //調用
 log.debug();
 log.info();

然后很多人就覺得不爽了,這特么這里聲明一個log變量,那里聲明一個log變量,多傻呀,於是就產生了下面的記錄方式:

 LogHelper.debug();//或者LogUtil.debug()
 LogHelper.info();

在這里,我不是針對誰,這么用的人,根本沒有掌握log4x的意義所在!!!

日志記錄解決方案#

階段一##

最開始,是Console.Write,打印到控制台,看看內容是什么

階段二##

console有兩個弊端:
1)影響正常的輸出——生產版本需要將這些打印代碼去掉;
2)需要看的時候又一下刷過去了
於是變成文件記錄

階段三##

發現有些信息放在一起,總是從一大段無用的信息中去查找一些信息,於是產生了日志級別,根據不同的級別,記錄到不同的地方
發現了Trace, Debug,Info, Warn, Error等級別。

階段四##

發現調試信息特別多,記錄起來沒什么意義,要輸出還影響程序性能。
但是有些問題,只能在生產環境下重現問題。
於是一種可以靈活控制日志輸出的解決方案——log4x出現了。

log4x的用法#

可能很多人的用法僅限於,設置一個root的log配置

<root level="INFO">
	<appender-ref ref="console" />
	<appender-ref ref="rollingFile" />
</root>

但實際上,還有如下的方式

	<logger name="com.abc.www.LogTest" level="DEBUG" />
	<logger name="com.abc.www" level="DEBUG" />
	<logger name="com.abc" level="DEBUG" />

當有如下logger的實例時

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變量。
希望看到這篇文章的朋友,不再疑惑。


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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM