zoukankan      html  css  js  c++  java
  • 求求别再这么用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变量。
    希望看到这篇文章的朋友,不再疑惑。


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

  • 相关阅读:
    导航
    占位
    django(一)
    进程与线程
    网络编程
    反射 单例模式
    面向对象及命名空间
    logging,包
    模块(二)os hashlib
    装饰器&递归
  • 原文地址:https://www.cnblogs.com/binblog/p/6307344.html
Copyright © 2011-2022 走看看