SpringBoot 日志

目录

一、日志概述

二、日志使用

2.1 打印日志

2.2 日志格式

2.3 日志级别

2.4 日志配置

2.4.1 日志级别

2.4.2 日志持久化

2.4.3 日志文件分割

2.4.4 配置日志格式

三、更简单的日志输出

3.1 添加 lombok 依赖

3.2 输出日志


一、日志概述

在SpringBoot项目启动后,项目本身就有默认的日志输出,即:

那么如何自己打印如上的日志呢?

二、日志使用

 SpringBoot 内置了日志框架 Slf4j,可以直接在程序中调用 Slf4j 来输出日志。

2.1 打印日志

打印日志的步骤:
  1. 在程序中得到日志对象;
  2. 使用日志对象输出要打印的内容。

在程序中获取日志对象需要使用日志工厂LoggerFactory,如下代码所示:

private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
Logger 对象是属于 org.slf4j 包下的,不要导入错包。
日志对象的打印方法有很多种,先使用 info() 方法来输出日志,如下代码所示:
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class LoggerController {
 private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

 @PostConstruct
 public String logger(){
      logger.info("info 日志");
       return "打印日志";
 }
}

2.2 日志格式

 从上图可以看到,日志输出内容元素具体如下:

①. 时间日期:精确到毫秒

②. 日志级别:ERROR, WARN, INFO, DEBUG 或TRACE

③. 进程ID

④. 线程名

⑤. Logger名(通常使用源代码的类名)

⑥. 日志内容

2.3 日志级别

日志的级别从高到低依次为: FATAL、ERROR、WARN、INFO、DEBUG、TRACE。级别越高, 收到的消息越少。
  • FATAL: 致命信息,表示需要立即被处理的系统级错误。
  • ERROR: 错误信息, 级别较高的错误日志信息, 但仍然不影响系统的继续运行。
  • WARN: 警告信息, 不影响使用, 但需要注意的问题。
  • INFO: 普通信息, 用于记录应用程序正常运行时的一些信息, 例如系统启动完成、请求处理完成等。
  • DEBUG: 调试信息, 需要调试时候的关键信息打印。
  • TRACE: 追踪信息, 比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使同DEBUG级别替代)。

那么可以通过以下代码实现不同级别的日志打印:

/**
 * 打印不同级别的⽇志
 * @return
 */
@PostConstruct
public String printLog() {
 logger.trace("================= trace ===============");
 logger.debug("================= debug ===============");
 logger.info("================= info ===============");
 logger.warn("================= warn ===============");
 logger.error("================= error ===============");
 return "打印不同级别的⽇志" ;
}

结果发现, 只打印了info, warn和error级别的日志,这与日志级别的配置有关, 日志的输出级别默认是 info级别, 所以只会打印大于等于此级别的日志, 也就是info, warn和error。

2.4 日志配置

2.4.1 日志级别

日志级别配置只需要在配置文件中设置"logging.level"配置项即可。
在properties文件中:
logging.level.root=debug

在yml文件中:

logging:
 level:
  root: debug

配置完成之后,重新启动项目,运行上面代码,可发现:

2.4.2 日志持久化

以上的日志都是输出在控制台上的,然而在线上环境中需要把日志保存下来, 以便出现问题之后追溯问题。把日志保存下来就叫持久化。 日志持久化有两种方式:
  • 配置日志文件名
  • 配置日志的存储目录
1. 配置日志文件的路径和文件名:
properties配置 :
logging.file.name=springboot.log
yml配置 :
# 设置⽇志⽂件的⽂件名
logging: 
 file: 
  name: springboot.log

启动项目刷新之后会显示:

2. 配置日志文件的保存路径

properties配置
logging.file.path=D:/temp

yml配置:

# 设置⽇志⽂件的⽬录
logging:
 file:
  path: D:/temp

启动项目刷新之后会显示:


这种方式只能设置日志的路径, 文件名为固定的spring.log。

logging.file.name logging.file.path 两个都配置的情况下, 只生效其一, 以 logging.file.name 为准。

2.4.3 日志文件分割

如果我们的日志都放在一个文件中, 随着项目的运行, 日志文件会越来越大, 需要对日志文件进行分割。 默认日志文件超过10M就进行分割。
配置项说明默认值
http://logging.logback.rollingpolicy.file-name-pattern日志分割后的文件名格式${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz
http://logging.logback.rollingpolicy.max-file-size
日志文件超过这个大小就自动分割
10MB
配置日志文件分割:
properties配置 :
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i
logging.logback.rollingpolicy.max-file-size=1KB
yml配置 :
logging:
 logback:
  rollingpolicy:
   max-file-size: 1KB
   file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

日志文件超过1KB就分割,分割后的日志文件名为:日志名.日期.索引

项目运行, 多打印一些日志, 日志分割结果:

2.4.4 配置日志格式

目前日志打印的格式是默认的,打印日志的格式, 也是支持配置的,支持控制台和日志文件分别设置。
配置项说明默认值
http://logging.pattern.console控制台日志格式
%clr(%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM
dd'T'HH:mm:ss.SSSXXX}}){faint} %clr(${LOG_LEVEL_PATTERN:-
%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t])
{faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint}
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
http://logging.pattern.file
日志文件
的日志格
%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM
dd'T'HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- }
--- [%t] %-40.40logger{39} :
%m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
配置项说明:
  1. %clr(表达式){颜色} 设置输入日志的颜色,支持颜色有:blue、cyan、faint、green、magenta 、red、yellow
  2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}} 日期和时间--精确到毫秒
  3. %5p 显示日志级别ERROR,MARN,INFO,DEBUG,TRACE.
  4. %t 线程名,%c 类的全限定名,%M method,%L 为行号,%thread 线程名称,%m 或者 %msg 显示输出消息,%n 换行符
  5.  %5 若字符长度小于5,则右边用空格填充,%-5 若字符长度小于5,则左边用空格填充. %.15 字符长度超过15,截去多余字符,%15.15 若字符长度小于15,则右边用空格填充。 若字符长度超过15,截去多余字。
如果设置了颜色,但是没有生效,那么就需要配置。以下步骤进行配置即可:
”-Dspring.output.ansi.enabled=ALWAYS“
重新启动程序便可解决问题。
properties配置:
logging.pattern.console='%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n‘

yml配置:

logging:
 pattern:
  console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
  file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'

三、更简单的日志输出

每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐,,且每个类都添加一遍, lombok提供了一种更简单的方式。
  1.  添加 lombok 框架支持
  2. 使用 @slf4j 注解输出日志

3.1 添加 lombok 依赖

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

3.2 输出日志

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
 
 @PostConstruct
 public void log(){
 log.info("--------------要输出⽇志的内容----------------");
 }
}
运行结果如下:
  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值