SpringBoot 日志

目录

一、日志概述

二、日志使用

[2.1 打印日志](#2.1 打印日志)

[2.2 日志格式](#2.2 日志格式)

[2.3 日志级别](#2.3 日志级别)

[2.4 日志配置](#2.4 日志配置)

[2.4.1 日志级别](#2.4.1 日志级别)

[2.4.2 日志持久化](#2.4.2 日志持久化)

[2.4.3 日志文件分割](#2.4.3 日志文件分割)

[2.4.4 配置日志格式](#2.4.4 配置日志格式)

三、更简单的日志输出

[3.1 添加 lombok 依赖](#3.1 添加 lombok 依赖)

[3.2 输出日志](#3.2 输出日志)


一、日志概述

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


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

二、日志使用

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

2.1 打印日志

打印日志的步骤:

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

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

java 复制代码
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

Logger 对象是属于 org.slf4j 包下的,不要导入错包。
日志对象的打印方法有很多种,先使用 info() 方法来输出日志,如下代码所示:

java 复制代码
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级别替代)。

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

java 复制代码
/**
 * 打印不同级别的⽇志
 * @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文件中:

java 复制代码
logging.level.root=debug

在yml文件中:

java 复制代码
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 依赖

java 复制代码
<dependency>
 <groupId>org.projectlombok</groupId>
 <artifactId>lombok</artifactId>
 <optional>true</optional>
</dependency>

3.2 输出日志

java 复制代码
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
 
 @PostConstruct
 public void log(){
 log.info("--------------要输出⽇志的内容----------------");
 }
}

运行结果如下:

相关推荐
2401_8574396911 分钟前
SpringBoot框架下体育馆管理系统的构建
java·spring boot·spring
Black—slience12 分钟前
LeetCode2207解题思路
java·算法·leetcode·动态规划
以全速前进18 分钟前
[2024年]最新VMware Workstation虚拟机下载 带链接
java·软件工程
paopaokaka_luck20 分钟前
基于Spring Boot+Vue的减肥健康管理系统设计和实现【原创】(BMI算法,协同过滤算法、图形化分析)
java·vue.js·spring boot·后端
百炼成神 LV@菜哥2 小时前
记HttpURLConnection下载图片
java·开发语言·后端
高 朗2 小时前
【从0开始搭建微服务并进行部署】SpringBoot+dubbo+zookeeper
spring boot·微服务·dubbo·java-zookeeper
高高要努力3 小时前
SpringBoot-全局处理异常,时间格式,跨域,拦截器,监听器
java·spring boot·spring
Code豪客3 小时前
Java常用三类定时器快速入手指南
java·开发语言·后端·spring
阿乾之铭3 小时前
Lombok 在 IntelliJ IDEA 中的使用步骤
java·ide·intellij-idea
printf_8243 小时前
Android 长按文本弹出输入框
android·java·开发语言