天天看点

spring boot --接入@SLF4J日志

前言

  目前比较流行的日志框架有log4j、logback等,可能大家还不知道,这两个框架的作者是同一个人,Logback旨在作为流行的log4j项目的后续版本,从而恢复log4j离开的位置。另外 slf4j(Simple Logging Facade for Java) 则是一个日志门面框架,提供了日志系统中常用的接口,logback 和 log4j 则对slf4j 进行了实现,等于说slf4j 是一个规范接口,你可以通过它调用logback 和 log4j的实现功能

  为什么选择slf4j?

  1.spring boot核心库集成了slf4j 框架,不需要在pom.xml中再引入

  2.使用的人多

  3.logback 和 log4j 则对slf4j 进行了实现,等于说slf4j是一个规范,整合了log4j和logback

使用

  spring boot中slf4j会有一些默认配置,在没有要求(比如自定义日志输出模板,自定义日志放置目录)的情况下,我们可以直接使用

@RestController
public class Index {

    //通过LoggerFactory类,获取到日志类的实例对象
    private final Logger log = LoggerFactory.getLogger(Index.class); //注意Logger和LoggerFactory类是处于org.slf4j命名空间下

    @RequestMapping("login")
    public Object index() {
        log.info("info");//输出消息日志
        log.warn("warning");//输出警告日志
        log.error("error");//输出错误日志
return "end";
    }
}      

   上面的代码执行后,就可以看到idea的控制台内,会出现三条对应的日志消息。而在C:\Users\登录用户~1\AppData\Local\Temp\目录下也会生成对应的日志文件(名字是一堆hash字符)

配置日志自定义输出

  如果我们想定义日志的输出格式和输出位置,那么就需要进行相应配置

  配置日志文件输出路径

    在application.yml中添加配置

spring:
......
logging: //与spring同级
  file:
    name: logs/log.log //指定输出日志目录      

  配置日志输出格式

    在application.yml中增加配置

spring:
......
logging: //与spring同级
 # file:
   # name: logs/log.log //去除日志输出配置
  config: classpath:log.config.xml //指定slf4j配置文件,我们可以在这里面配置日志输出目录,同一个库的配置尽量放在一块      

    在log.config.xml中配置

      ... @slf4j配置详解

使用@SLF4J注解

  每次使用Logger,都需要通过LoggerFactory去获取Logger实例比较麻烦

private final Logger log = LoggerFactory.getLogger(当前类.class);      

  可以使用@SLF4J

@Slf4j //注解当前类
@RestControllerpublic class TestController {
    @RequestMapping("login")public String index(){
        log.debug("可以直接调用log打印日志了");
        return "testPrint";
    }
    
}      

  使用@SLF4J需要几个步骤

    1.idea下载安装lombok插件,(2021版本后的idea一般都捆绑安装了,高版本的idea可以省略此步骤)

      lombok简介:java自动生成代码的插件。它能提高开发效率,减少自己编写繁琐的代码,让代码看起来更整洁简略,比如getter、setter、equals以及construct等方法。其也有val、var这种自动判断变量类型的变量定义方式(类似javascript中的let、const)

      lombok安装:javascript:void(0)

      lombok详解:javascript:void(0)

    <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>      
@Slf4j //注解当前类
@RestController
public class TestController {
    @RequestMapping("login")
    public String index(){
        log.debug("可以直接调用log打印日志了");
        return "testPrint";
    }
    
}