Spring Boot 日志


T04BF
👋专栏: 算法|JAVA|MySQL|C语言
🫵 今天你敲代码了吗

文章目录

Spring Boot 日志

5.1 日志用途

  • 系统监控:通过日志记录这个系统的运行状态,每个方法的响应时间,响应状态等.对数据进行分析,超过阈值时报警等
  • 数据采集,如数据统计(统计浏览量,访客量等等),推荐排序(采集数据判断用户喜好)
  • 日志审计,可以判定一些非法攻击,非法调用等等

5.2 日志使用

我们可能最常用的是System.out.println()来打印,但是实际上这种方式缺少了许多信息

SpringBoot内置了日志框架slf4j,可以直接调用

5.2.1 打印日志
得到日志对象
java 复制代码
private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
  • Logger对象是属于org.slf4j包下的
  • LoggerFactory.``_getLogger_需要传递一个参数,标识这个日志的名称,就能更加清楚地知道是哪个类输出的日志
使用日志对象打印日志
java 复制代码
@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

    @RequestMapping("/logger")
    public String logger() {
        logger.info("=========Test Log=========");
        return "Test Log";
    }
}

5.3 日志格式

日志显示的内容有:

  1. 时间日期
  2. 日志级别(ERROR,WANR,INFO,DEBUG,TRACE)
  3. 进程ID
  4. 线程名
  5. logger名
  6. 日志内容

5.4 日志级别

日志级别代表着日志信息对应问题的严重性,为了更快的筛选目标的日志信息

分类

日志级别从高到低依次为:FATAL,ERROR,WARN,INFO,DEBUG,TRACE

  • FATAL:致命信息,表示需要被立即处理的系统级别错误
  • ERROR:错误级别,级别比较高的错误日志信息,但不影响系统的继续运行
  • WARN:警告信息,不影响使用,但需要注意的问题
  • INFO:普通信息,用于记录应用程序正常运行时的一些信息,例如系统启动完成、请求处理完成等
  • DEBUG:调试信息,需要调试时候的关键信息打印
  • TRACE:追踪信息,比BEBUG更加细粒度的信息时间
使用

针对不同的日志级别,Logger对象分别提供了对应的方法,来输出日志

java 复制代码
@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @RequestMapping("/logger2")
    public void logger2() {
        logger.trace("========= trace =========");
        logger.debug("========= debug =========");
        logger.info("========= info =========");
        logger.warn("========= warn =========");
        logger.error("========= error =========");
    }
}

但是实际上只是打印了INFO以上的级别的日志

这与日志的配置有关,日志的输出默认级别是info级别

5.5 日志配置

配置日志级别

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

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

此时日志就能打印debug以上级别的日志了

但是此时我们会发现spring boot自带的debug级别的日志也都显示出来了,我们可以设置单独某一个地方的日志:

日志持久化

我们通常需要将日志保存起来.以便出现问题之后追溯,日志持久化有两种方式:

  1. 配置日志文件名
  2. 配置日志的存储目录
配置日志的路径和文件名
properties 复制代码
logging.file.name=logger/springboot.log

运行后可以看到:

路径就会存储在这里面

配置日志文件的保存路径
properties 复制代码
logging.file.path=D:/temp

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

配置日志文件分割

如果我们的日志文件都放在同一个文件,那么随着项目的运行,日志文件会越来越大,需要对日志文件进行分割

默认日志文件超过10M就会进行分割

复制代码
logging.logback.rollingpolicy.max-file-size=2KB
logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i.zip
配置日志格式

默认的日志格式是这样的

这些内容都是可以配置的,支持控制台配置和日志文件配置
配置控制台日志格式配置
logging.pattern.console

默认值是:

properties 复制代码
%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}

配置日志文件的日志格式
logging.pattern.file

properties 复制代码
%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. %cir(表达式)(颜色):设置输出日志的颜色

支持的颜色有:blue,cyan,faint,green,magenta,red,yellow

  1. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd'T'HH:mm:ss.SSSXXX}}:日期和时间--精确到毫

  1. %5p 显示日志级别ERROR,WARN,INFO,DEBUG,TRACE

  2. %t 线程名.%c全限定类名.%m method.%L为行号.%thread线程名.%m或者%msg

显示输出消息.%n换行符

  1. %5 若字符长度小于5,则右边用空格填充. %-5 若字符长度小于5,则左边⽤空格填充. %.15 若字符长度超过15,截去多余字符. %15.15 若字符长度小于15,则右边用空格填充.若字符⻓度超过15,截去多余字符

实际上通常情况下,使用默认的日志输出格式即可

5.6 更简单的日志输出

lombok给我们提供了更加简单的方式

  1. 添加lombok依赖
  2. 使用@slf4j注解输出日志
java 复制代码
@Slf4j
@RestController
public class LoggerController {

    @RequestMapping("/logger")
    public String logger() {
        log.info("=========Test Log=========");
        return "Test Log";
    }

    @RequestMapping("/logger2")
    public void logger2() {
        log.trace("========= trace =========");
        log.debug("========= debug =========");
        log.info("========= info =========");
        log.warn("========= warn =========");
        log.error("========= error =========");
    }
}

我们查看idea反编译的字节码:

实际上就是 lombok提供的@Slf4j会帮我们提供一个日志对象log,直接使用即可
感谢您的访问!!期待您的关注!!!


T04BF
🫵 今天记得敲代码

相关推荐
_WndProc10 分钟前
【Python】Flask网页
开发语言·python·flask
互联网搬砖老肖11 分钟前
Python 中如何使用 Conda 管理版本和创建 Django 项目
python·django·conda
深栈解码14 分钟前
JMM深度解析(三) volatile实现机制详解
java·后端
张家宝683721 分钟前
ambari
后端
测试者家园23 分钟前
基于DeepSeek和crewAI构建测试用例脚本生成器
人工智能·python·测试用例·智能体·智能化测试·crewai
StephenCurryFans23 分钟前
Spring AI vs LangChain4j:Java AI开发框架完整对比指南 🚀
后端·spring
程序员辉哥27 分钟前
学会在Cursor中使用Rules生成代码后可以躺平了吗?
前端·后端
大模型真好玩27 分钟前
准确率飙升!Graph RAG如何利用知识图谱提升RAG答案质量(四)——微软GraphRAG代码实战
人工智能·python·mcp
Brookty28 分钟前
【MySQL】JDBC编程
java·数据库·后端·学习·mysql·jdbc
_代号00731 分钟前
MySQL梳理一:整体架构概览
后端·mysql