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文档

相关推荐
lj850862 小时前
性能测试总结
java·开发语言·spring
yhdata2 小时前
自然灾害检测物联网系统市场稳步扩容:2032年规模剑指392.7亿元,六年CAGR达33.8%
java·物联网·struts
小锅锅氩2 小时前
JavaDay01
java·ide·intellij-idea
smxgn2 小时前
Springboot 整合 Quartz(定时任务框架)
java·spring boot·后端
C雨后彩虹2 小时前
最小矩阵宽度
java·数据结构·算法·华为·面试
难忘经典2 小时前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins
liuyao_xianhui2 小时前
动态规划_最长递增子序列_C++
java·开发语言·数据结构·c++·算法·链表·动态规划
程序员爱酸奶2 小时前
Java常用设计模式
java·开发语言·设计模式
Meepo_haha2 小时前
Go基础之环境搭建
开发语言·后端·golang