日志详解:log4j与slf4j的区别和使用

前言

对于编码人员来说,在开发过程中引入第三方日志库来打印信息是必不可少的,而很多程序员也已经熟悉各种不同的日志库如java.util.logging、apache log4j、logback,那么当看到已有项目中既有slf4j和log4j而感到困惑,或者是以前没听过slf4j的话,就有必要去在你项目中学习使用slf4j了。

一、log4j和slf4j的区别

log4j( log for java )(4 同 for)
Apache的一个开源项目,可以灵活地记录日志信息,我们可以通过Log4j的配置文件灵活配置日志的记录格式、记录级别、输出格式,而不需要修改已有的日志记录代码。
slf4j:simple log facade for java 简单日志门面
slf4j不是具体的日志解决方案,它只服务于各种各样的日志系统。按照官方的说法,SLF4J是一个用于日志系统的简单Facade,允许最终用户在部署其应用时使用其所希望的日志系统。
可以将log4j看成是一个完整的日志库,而slf4j是一个日志库的规范接口。

那么使用slf4j有什么好处呢?

1. 让日志和项目之间解耦

想象一下这种场景,目前我们的项目已经使用了log4j作为日志库,有一天我们引入了一个技术大牛编写的组件,但是这个组件使用的是logback来进行日志输出,那么问题就来了,我们就不得不需要添加两个实现同样功能的jar包并且维护两套日子配置。
而slf4j 是一个适配器,我们通过调用slf4j的日志方法统一打印我们的日志,而可以忽略其他日志的具体方法,这样,当我们的系统换了一个日志源后,不需要更改代码

2. 节省内存

log4j这些传统的日志系统里面并没有占位符的概念,当我们需要打印信息的时候,我们就不得不创建无用String对象来进行输出信息的拼接。

    private void log4jTest(){
        String errormsg = "something error happen...";
        logger.info("错误信息为:"+errormsg);
    }

slf4j可以使用占位符,这样日志输出的时候就可以避免无用字符串对象的创建

    private void slf4jTest(){
    logger.info("错误信息为:{}","something error happen...");
    }

二、在项目中使用slf4j

1. 在项目pom文件中引入
         
            org.slf4j
            slf4j-api
            1.7.13
        
        
            org.slf4j
            slf4j-log4j12
            1.7.13
        

或者引入

    
    
        org.springframework.boot
        spring-boot-starter-log4j
        1.3.8.RELEASE
    
2. 在类中使用LogFactory创建类的log对象

image.png

注意:一般来说,我们会用static、final关键字来对日志对象进行修饰。

  • 设置为private是为了防止其他类使用当前类的日志对象;
  • 设置为static是为了让每个类中的日志对象只生成一份,日志对象是属于类的,不是属于具体的实例的;
  • 设置成final是为了避免日志对象在运行时被修改。

参考文档:
https://blog.csdn.net/minicto/article/details/52672472
https://www.cnblogs.com/hafiz/p/5486858.html

你可能感兴趣的:(日志详解:log4j与slf4j的区别和使用)