spring boot --接入@SLF4J日志

前言

  市面上有很多日志库,log4j、log4j2,slf4j等,为什么选择用slf4j呢,原因如下

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

  2.使用的人多

使用

  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安装:https://www.cnblogs.com/sxdcgaq8080/p/7884477.html

      lombok详解:https://blog.csdn.net/qq_28851503/article/details/80961759

    2.pom.xml引入lombok的包

     <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>

    3.然后就可以愉快的使用@SLF4J注解了

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

 

上一篇:lombok 的使用及简单实现及注解


下一篇:虚基类(virtual base class)