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


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

转载于:https://my.oschina.net/javabin/blog/827846

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值