Spring-Boot日志
Spring Boot日志
Spring 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";
}
}
这里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,就不需要我们再手动声明了。
日志格式:
(第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没有打印日志方法,致命级别的信息需要立即处理,不需要通过日志来记录。
可以配置一个(这里展示的是在.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
就算把路径写成含.log的形式,它也只会是文件夹
logging:
file:
path: logger/temp.log
优先级
那如果path和name这两种方式都在哪一个优先呢?
logging:
file:
path: logger1/temp.log
name: logger2/springboot.log
可以看到是name更优先。
那会不会是顺序的原因?
可以看到交互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 可以去掉,也可以换成其他后缀。