目录

Spring-Boot日志

Spring Boot日志

https://i-operation.csdnimg.cn/images/cf31225e169b4512917b2e77694eb0a2.pngSpring Boot日志管理详解


日志的用途:

1、系统监控

2、数据采集

3、日志审计

日志打印

package com.bit.springiocdemo.controller;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RequestMapping("/logger")
@RestController
public class LoggerController {
    //声明一个日志对象 使用org.slf4j这个包下的
    private static Logger logger = LoggerFactory.getLogger("aaa");
    //private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

    @RequestMapping("/print")
    public String print() {
        logger.info("我打印日志----logger");
        System.out.println("我打印日志---sout");
        return "1";
    }
}

https://i-blog.csdnimg.cn/direct/1216b938c30d4dbdb1efc91e54071650.png

这里16344是进程id,可通过任务管理器查到,aaa是日志对象名称,

LoggerFactory.getLogger(LoggerController.class);

通常这里写成类名,就知道是哪个类打印的日志了。

更简单的日志打印–@Slf4j

package com.bit.springiocdemo.controller;

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@Slf4j
@RequestMapping("/logger2")
@RestController
public class LoggerController2 {
    @RequestMapping("/print")
    public String print() {
        log.info("我打印日志----logger");

        log.error("我是error级别日志");
        log.warn("我是warn级别日志");
        log.debug("我是debug级别日志");
        log.trace("我是trace级别日志");
        log.info("我是info级别日志");
        return "1";
    }
}

我们可以使用一个类注解@Slf4j,它会自动生成一个日志对象log,就不需要我们再手动声明了。

日志格式:

https://i-blog.csdnimg.cn/direct/d212745d1de54381ac49867cb5e87742.png

(第3个是进程id,图片里我写错了)

日志级别:

日志级别代表日志信息对应问题的严重性。

级别从高到低:

FATAL, ERROR, WARN, INFO, DEBUG, TRACE

FATAL:致命信息,需要立即被处理的系统级错误

ERROR:错误信息,级别较高的错误日志信息,但仍然不影响系统的继续运行,但长期有影响

WARN:警告信息,不影响使用,需要注意的问题

INFO:普通信息,用于记录应用程序正常运行时的一些信息,比如系统启动完成、请求处理完成。

DEBUG:调试信息,调试时的关键信息打印。

TRACE:追踪信息,比DEBUG更细粒度的信息。

我们一般只关注WARN和INFO。

   @RequestMapping("/print")
    public String print() {
        logger.info("我打印日志----logger");

        logger.error("我是error级别日志");
        logger.warn("我是warn级别日志");
        logger.info("我是info级别日志");
        logger.debug("我是debug级别日志");
        logger.trace("我是trace级别日志");
        return "1";
    }

fatal没有打印日志方法,致命级别的信息需要立即处理,不需要通过日志来记录。

https://i-blog.csdnimg.cn/direct/c5f982fa6ffd43c9a41f6e5f8f45889e.png

可以配置一个(这里展示的是在.properties中)

logging.level.root = debug就会显示到debug级别,

配置logging.level.root = trace就会显示到trace级别。

分目录设置日志级别

 我们还可以这样设置(在.yml中)

logging:
  level:
    root: info
    com:
      bit:
        springiocdemo:
          controller: trace

在com.bit.springiocdemo.controller这个路径下日志打印显示到trace级别,而其他路径显示到info级别。

日志持久化

上面展示的日志都是打印在控制台上的,

我们需要把日志保存下来以便出现问题时追踪溯源,把日志保存下来就是日志持久化。

日志持久化有两种方式:

1.配置日志文件名

2.配置日志的存储目录

配置日志文件名

properties配置

logging.file.name=logger/springboot.log

yml配置

logging:

    file:

      name: logger/springboot.log

项目刷新后就会在项目中创建一个logger文件夹含有一个springboot.log文件

配置日志的存储目录

yml配置

logging:

   file:

     path:路径1/路径2

根据这个path只会生成文件夹,默认在最里面的文件夹生成一个spring.log的文件;

logging:
  file:
    path: logger/temp

https://i-blog.csdnimg.cn/direct/254b5c228587417e8e6b21d534561226.png

就算把路径写成含.log的形式,它也只会是文件夹

logging:
  file:
    path: logger/temp.log

https://i-blog.csdnimg.cn/direct/9b2dde791b594af59534b1f798a513e8.png

优先级

那如果path和name这两种方式都在哪一个优先呢?

logging:
  file:
    path: logger1/temp.log
    name: logger2/springboot.log

https://i-blog.csdnimg.cn/direct/4b40dad2d0c64d86880f27c980796127.png

可以看到是name更优先。

那会不会是顺序的原因?https://i-blog.csdnimg.cn/direct/429d8797dc474658a1768b8eb9eac15a.png

可以看到交互name和path的顺序也还是name更优先。

所以同时配置,以file.name为准。

日志分割

logging:
  file:
    name: logger2/springboot.log
    path: logger1/temp.log
  logback:
    rollingpolicy:
      max-file-size: 1KB
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

max-file-size这个是按照大小来分割,这里设置的是日志文件最大不超过1kb;

file-name-pattern这个是按照文件名字格式来分割,{LOG_FILE}这个是设置的日志名称 在这里就是springboot.log,

{yyyy-MM-dd}这个是日期,日期不同也会分割,

%i就是第几个,

文件后缀是.gz 可以去掉,也可以换成其他后缀。