SLF4j整合Log4J

作者: 颜洛滨 | 来源:发表于2017-06-24 10:25 被阅读133次

    SLF4j整合Log4J

    前言

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

    SLF4j整合Log4j

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

    
    <!-- log4j2 -->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.8.2</version>
    </dependency>
    
    <!-- log4j-slf4j实现,此依赖非常重要-->
    <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-slf4j-impl</artifactId>
        <version>2.8.2</version>
    </dependency>
    
    

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

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

    
    <?xml version="1.0" encoding="UTF-8" ?>
    
    <Configuration status="WARN">
        <Appenders>
            <Console name="Console" target="SYSTEM_OUT">
                <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS}  [ %-5p ]  ( %l ) -  %m%n"></PatternLayout>
            </Console>
        </Appenders>
        <Loggers>
            <root level="WARN">
                <appender-ref ref="Console"/>
            </root>
        </Loggers>
    </Configuration>
    
    

    在编码中,使用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

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