SLF4j整合Log4J

SLF4j整合Log4J

前言

最近翻看了阿里巴巴Java开发者手册,发现其中有一点提到了不要在应用中直接使用具体的日志框架,而推荐使用SLF4j框架,然后提供所需要的对应的日志框架的实现即可,一开始没怎么理解这一点。后来查看了一下才明白,SLF4j框架提供的仅仅是抽象的API接口,并没有绑定具体的实现,使用这种组合方式的优点在于,避开了应用绑定具体的日志框架,在某些时候,可能需要切换不同的日志框架,如果直接绑定了某一个框架,比如Log4j2,那修改起来就会非常麻烦了,而直接使用SLF4j框架,只需要根据需要提供对应的实现即可。

SLF4j整合Log4j

首先需要添加对应的依赖,如下所示




    org.apache.logging.log4j
    log4j-core
    2.8.2




    org.apache.logging.log4j
    log4j-slf4j-impl
    2.8.2


这里需要注意的是,使用的时候需要提供的实现是log4j-slf4j-impl而不是slf4j-log4j12,非常重要,不能用错

然后在类路径提供log4j2的配置文件,这里仅仅给出最简单的配置log4j2.xml





    
        
            
        
    
    
        
            
        
    


在编码中,使用slf4j提供的API,而不再是log4j所提供的API


// 这里需要注意的是,导入的是slf4j包下的logger类
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * Created by Huanfeng.Xu on 2017-06-24.
 */
public class TestLog4J {

    private static final Logger logger = LoggerFactory.getLogger(TestLog4J.class);

    public static void main(String[] args) {
        logger.info("test Info");
        logger.warn("test warning");
        logger.error("test error");
        logger.error("Current : {}", TestLog4J.class);
    }
}

总结

在应用中直接绑定具体的日志框架,从某种意义上来说,这种做法是有缺陷的,在不同的场合可能需要不同的日志框架,而一旦绑定了具体的框架,在需要更改的时候就比较头疼了,slf4j提供了一种比较好的方式,只需要使用slf4j提供的接口,并且为slf4j提供所要具体使用的日志框架的绑定,那么slf4j就会在使用时,将其转化为对应的具体框架的实现了

你可能感兴趣的:(SLF4j整合Log4J)