Log4j探秘

作者: alonwang | 来源:发表于2018-11-09 08:38 被阅读13次

    日志是一个系统不可或缺的一部分,这两天遇到了一个这方面的问题,笔者对这方面的知识还没有一个全方面的了解,正好借此机会好好研究一下

    从一个简单例子开始

    log4j.properties

    log4j.rootCategory=WARN, anyname
    log4j.appender.anyname=org.apache.log4j.ConsoleAppender
    log4j.appender.anyname.layout=org.apache.log4j.PatternLayout
    

    测试代码

    public static void main(String[] args) {
            Logger logger = LoggerFactory.getLogger(IDVerifyWebService.class);
            logger.debug("debug 233");
            logger.info("info 123");
            logger.warn("warn 233");
            logger.error("error 233");
        }
    

    运行结果如下

    warn 233
    error 233
    

    下面解释配置的含义
    log4j.rootCategory=WARN, anyname
    更通用的格式是
    log4j.rootCategory=Level,appenderName,appenderName,appenderName
    Level是日志记录的优先级,按优先级从低到高分为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者自定义的级别,如上面的例子,指定为WARN,那WARN级别以下的日志不会被输出

    appenderName是标识了一个输出源,等同于一个子节点,同一条日志可以有多个appenderName来输出到不同位置,这个名字可以随意取

    log4j.appender.anyname=org.apache.log4j.ConsoleAppender
    log4j.appender.anyname.layout=org.apache.log4j.PatternLayout
    这两条就是对输出log4j.rootCategory中配置的输出源anyname的必要配置,指明了它的输出类型,布局

    神说:要有时间和标志

    上面的例子确实很简单,好像简单过头了,我们无从得知这是什么时候发生的,也不知道这个日志的严重程度,而这就是ConversionPattern要做的事情

    log4j.rootCategory=INFO, anyname
    log4j.appender.anyname=org.apache.log4j.ConsoleAppender
    log4j.appender.anyname.layout=org.apache.log4j.PatternLayout
    log4j.appender.anyname.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
    

    下图可以很容易看出日志的级别,方便寻找真正严重的问题


    image.png

    定义appender,只能在rootCategory吗?

    当然不是,log4j.logger.appenderName 也能定义.下面这个例子也定义了一个新的appender

    log4j.logger.anyname=WARN, anyname
    log4j.appender.anyname=org.apache.log4j.ConsoleAppender
    log4j.appender.anyname.layout=org.apache.log4j.PatternLayout
    

    对于一些框架自带的日志,我不想要,如何去关闭?

    很简单,覆盖它的默认设置,不给它输出位置,例如spring
    log4j.logger.org.springframework=WARN
    这里应该是有个约定俗称的地方: 框架的默认日志appendName都是它的包名的一部分,比如

    • spring log4j.logger.org.springframework
    • hibernate log4j.logger.org.hibernate

    1. https://blog.csdn.net/caolaosanahnu/article/details/7553999

    相关文章

      网友评论

        本文标题:Log4j探秘

        本文链接:https://www.haomeiwen.com/subject/azdwxqtx.html