Spring日志管理

1. 日志概念

所谓日志就是程序在运行的过程中,按照时间顺序,主动以标准化格式记录所发生的事情,使程序员可以更好的掌控自己代码

2. 如何用SLF4J打印日志

SpringBoot中内置了SLF4J日志框架,可以直接调用。它采用了门面模式通过SLF4J位日志的门面进行设计,具体的子系统有:JUL、log4j i/o、logback

2.1创建对象

代码实例:

我们通过SLF4J包下的Logger类进行创建对象,对象可以从LoggerFactory日志工厂中获取,

getLogger()方法中传入的值为你要打印日志的类

java 复制代码
@RestController
public class LogTest {
    @RequestMapping("/Test")
    public String Test(){
        Logger logger = LoggerFactory.getLogger(LogTest.class);
        logger.info("打印日志");
        return "日志打印";
    }
}

输出:

2026-03-15T00:39:45.698+08:00为该日志的时间信息(具体到毫秒, INFO为日志的级别,21052为进程名,[spring_backgammon]为项目名,[nio-8080-exec-6]为线程名,com.examp- le.testapi.controller.LogTest为打印这条日志的类路径,接下来才是具体的日志信息

2.2使用注解

如果使用创建对象的形式打印日志,在不同类下都要创建对应的对象,相比通过一个注解解决比较复杂

  1. 添加lombok依赖
java 复制代码
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
  1. 代码实例

相比之下只是通过一个@slf4j注解替换了Logger logger =LoggerFactory. getLogger(LogTest.class)

java 复制代码
@Slf4j
@RestController
public class LogTest {
    @RequestMapping("/Test")
    public String Test(){
        log.info("打印日志");
        return "日志打印";
    }
}

3. 日志的等级

⽇志的级别从**⾼到低** 依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE
• FATAL: 致命信息,表⽰需要⽴即被处理的系统级错误.
• ERROR: 错误信息, 级别较⾼的错误⽇志信息, 但仍然不影响系统的继续运⾏.
• WARN: 警告信息, 不影响使⽤, 但需要注意的问题
• INFO: 普通信息, ⽤于记录应⽤程序正常运⾏时的⼀些信息, 例如系统启动完成、请求处理完成等.(默认使用)
• DEBUG: 调试信息, 需要调试时候的关键信息打印.
• TRACE: 追踪信息, ⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)

4.日志配置

我们可以通过修改日志的配置信息,进而实现修改日志的默认级别、日志的持久化处理、甚至是日志的打印格式等

4.1日志的持久化

在一个项目中我们可以通过修改配置信息,实现通过追加写的形式把全部日志存放在文件中,从而实现日志的持久化

配置项 作用 示例值
logging.file.name 指定日志文件的完整路径 + 文件名 (优先级高于 logging.file.path ./logs/app.log
logging.file.path 指定日志文件的存储目录 (文件名将默认设为 spring.log ./logs/var/log

实例:
Spring项目可以直接在配置文件中修改,这里通过yml形式进行演示

java 复制代码
#日志打印配置
logging:
  file:
    name: spring-blog.log
    path: ./logs

4.2 日志文件分割

但随着时间的推移日志信息回越来越多,为了方便后续的查看我们需要对其进行整理,我们可以通过文件的大小进行分割文件,当文件达到我们设置的大小时自动生成新的一个文件,同时我们还可以对文件的命名格式进行设定

  1. 设置文件大小

默认值为:默认1MB

java 复制代码
logging:  
  logback:
    rollingpolicy:
      max-file-size: 1B
      
  1. 设置文件名格

默认值为:${LOG_FILE}.%d{yyyy-MM-dd}.%i.gz

java 复制代码
logging:  
  logback:
    rollingpolicy:
      max-file-size: 1B(默认1MB)
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i

4.3 配置⽇志格式

默认日志的格式如下,分别为时间戳、日志级别、进程ID、线程名、打印类的路径、打印内容

修改日志格式

  1. 打印控制台⽇志格式
java 复制代码
logging:
  pattern:
    console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n' 
  1. 打印⽇志⽂件中的⽇志格式
java 复制代码
logging:
  pattern:
    file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
  1. 设置打印日志的级别

控制台日志打印的默认是INFO,控制台只会打印级别大于等于它的日志级别,也就是看不到TRACE和DEBUG日志级别,但也可以通过配置文件修改级别

java 复制代码
logging:
  level:
    root: TRACE (默认是INFO)

想了解更多日志配置信息可以去:Spring文档

相关推荐
ch.ju33 分钟前
Java程序设计(第3版)第二章——java的数据类型:小数
java
Advancer-1 小时前
RedisTemplate 两种序列化实践方案
java·开发语言·redis
元宝骑士1 小时前
深度解析 ROW_NUMBER() 窗口函数:从入门到实战避坑指南
后端·mysql
java1234_小锋1 小时前
Java高频面试题:MyBatis如何实现动态数据源切换?
java·开发语言·mybatis
墨神谕1 小时前
Java中,为什么要将.java文件编译成,class文件,而不是直接将.java编译成机器码
java·开发语言
段小二1 小时前
Token 费用失控、VIP 用户体验一样烂:Context Engineering 才是关键
人工智能·后端
Nyarlathotep01131 小时前
并行设计模式(3):Future模式
java·后端
流星雨在线1 小时前
汇总:Tomcat 安装与常用配置
java·tomcat
秋风不问归客2 小时前
Springboot面试全面整理
spring boot·后端·面试
小冷coding2 小时前
【面试】结合项目整理的场景面试题,覆盖 Java 基础、锁、多线程、数据库、分布式锁 / 事务、消息中间件等核心维度
java·数据库·面试