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变量。
但愿看到这篇文章的朋友,再也不疑惑。
微信,加好友,不用付款