求求别再这么用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变量。
但愿看到这篇文章的朋友,再也不疑惑。


微信,加好友,不用付款
二维码