【Springboot】日志

1.日志的使用

日志主要用于记录程序运行的情况。我们从学习javase的时候就使用System.out.println();打印日志了,通过打印的日志来发现和定位问题,或根据日志来分析程序运行的过程。在Spring的学习中,也经常根据控制台的⽇志来分析和定位问题 。

日志除了发现和定位问题,还可以进行系统监控,数据采集和日志审计。

系统监控:统计⽇志中关键字的数量,并在关键字数量达到⼀定条件时报警,这也是⽇志的常⻅需求之⼀

数据采集:统计⻚⾯的浏览量(PV),访客量(UV),点击量等,根据这些数据进⾏数据分析,优化公司运营策略

日志审计:一条记录的删除或修改 ,通过日志记录是谁操作的,如果出现内部的违规和信息泄露现象后,为时候追查提供依据。⼀些公司查看客⼾的信息都会被记录⽇志,如果频繁查询也会报警

1.1.打印日志

java 复制代码
@RestController
public class LoggerController {
    //1.定义日志对象
    private Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @PostConstruct
    public void print(){
        System.out.println("打印日志");
        logger.info("=====我是使用日志框架打印日志=====");
    }
}

打印结果:

使⽤⽇志对象打印⽇志的结果显示的信息比System.out.println();要全。日志对象打印的日志包括:时间,级别,进程ID,线程,打印日志的类,日志内容。

日志对象的名称,通常情况下,是当前类,可能为缩写。

1.2 日志框架的介绍

日志框架使用的SLF4J 。SLF4J 并不是一个真实的日志实现,而是日志的门面。不能独立使用,需要搭配具体的实现日志比如:log4j/2,或者logback。

SLF4J 是外观模式(门面模式)的典型应用,注意SLF4J 并不是只有外观模式。

门面模式(FacadePattern)又称为外观模式,提供了一个统一的接口,用来访问子系统的一群接口。其主要特征是定义了⼀个高层接口,让子系统更容易使用.

门面模式的优点:

  1. 实现了客户端和子系统间的耦合关系,使子系统的变化不会影响到调用他的客户端。
  2. 提高了灵活性,简化了客户端对子系统的使用难度,客户端无需关心子系统的具体实现,只需要和门面对象交互即可。
  3. 提⾼了安全性.可以灵活设定访问权限,不在⻔⾯对象中开通⽅法,就⽆法访问

1.3 日志的级别

⽇志的级别从⾼到低依次为:FATAL、ERROR、WARN、INFO、DEBUG、TRACE

• FATAL:致命信息,表⽰需要⽴即被处理的系统级错误.

• ERROR:错误信息,级别较⾼的错误⽇志信息,但仍然不影响系统的继续运⾏.

• WARN:警告信息,不影响使⽤,但需要注意的问题

• INFO:普通信息,⽤于记录应⽤程序正常运⾏时的⼀些信息,例如系统启动完成、请求处理完成等.

• DEBUG:调试信息,需要调试时候的关键信息打印.

• TRACE:追踪信息,⽐DEBUG更细粒度的信息事件(除⾮有特殊⽤意,否则请使⽤DEBUG级别替代)

日志级别的使用:

java 复制代码
@Slf4j
@RestController
public class LoggerController {
    //1.定义日志对象
    private Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @PostConstruct
    public void print(){
        logger.info("=====我是使用日志框架打印日志=====");
        logger.error("我是error日志");
        logger.warn("我是warn日志");
        logger.info("我是info日志");
        logger.debug("我是debug日志");
        logger.trace("我是trace日志");
    }
}

输出结果:

因为spring默认的日志级别是info.只能输出比info高的日志信息。所以我们上面的输出结果中debug和trace没有输出。

要想输出日志级别比info低的需要进行日志配置

1.4日志配置

其他配置可以查看:常见的 Application Properties (springdoc.cn)

配置日志级别为debug:

yaml 复制代码
logging:
  level:
    root: info # 全局目录的级别
    com:
      bite:
        demo: debug # 指定目录日志的级别

日志的持久化(就是把日志保存在文件中):

yaml 复制代码
logging:
  file:
    name: logger/ioc.log

日志分割:

yaml 复制代码
logging:
  logback:
    rollingpolicy:
      max-file-size: 1KB # 分割日志文件的大小
      file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i # 日志文件分割的名称定义规则

配置日志格式:

yaml 复制代码
logging:
    console: '%d{HH:mm:ss.SSS} %c %M %L [%thread] %m%n' # 控制台格式
    file: '%d{HH:mm:ss.SSS} %c %M %L [%thread] %m%n' # 文件格式	

2. 简单的日志输出

先添加lombok依赖。然后在类上添加@Slf4j注解

java 复制代码
@Slf4j
@RestController
public class LoggerController {
    @PostConstruct
    public void print(){
        log.info("=====我是使用日志框架打印日志=====");
        log.error("我是error日志");
        log.warn("我是warn日志");
        log.info("我是info日志");
        log.debug("我是debug日志");
        log.trace("我是trace日志");
    }
}
相关推荐
郑祎亦8 分钟前
Spring Boot 项目 myblog 整理
spring boot·后端·java-ee·maven·mybatis
不是二师兄的八戒8 分钟前
本地 PHP 和 Java 开发环境 Docker 化与配置开机自启
java·docker·php
爱编程的小生20 分钟前
Easyexcel(2-文件读取)
java·excel
本当迷ya21 分钟前
💖2025年不会Stream流被同事排挤了┭┮﹏┭┮(强烈建议实操)
后端·程序员
带多刺的玫瑰37 分钟前
Leecode刷题C语言之统计不是特殊数字的数字数量
java·c语言·算法
计算机毕设指导61 小时前
基于 SpringBoot 的作业管理系统【附源码】
java·vue.js·spring boot·后端·mysql·spring·intellij-idea
Gu Gu Study1 小时前
枚举与lambda表达式,枚举实现单例模式为什么是安全的,lambda表达式与函数式接口的小九九~
java·开发语言
Chris _data1 小时前
二叉树oj题解析
java·数据结构
牙牙7051 小时前
Centos7安装Jenkins脚本一键部署
java·servlet·jenkins
paopaokaka_luck2 小时前
[371]基于springboot的高校实习管理系统
java·spring boot·后端