【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日志");
    }
}
相关推荐
一只叫煤球的猫15 分钟前
写代码很6,面试秒变菜鸟?不卖课,面试官视角走心探讨
前端·后端·面试
bobz96541 分钟前
tcp/ip 中的多路复用
后端
bobz9651 小时前
tls ingress 简单记录
后端
皮皮林5512 小时前
IDEA 源码阅读利器,你居然还不会?
java·intellij idea
你的人类朋友2 小时前
什么是OpenSSL
后端·安全·程序员
bobz9652 小时前
mcp 直接操作浏览器
后端
前端小张同学5 小时前
服务器部署 gitlab 占用空间太大怎么办,优化思路。
后端
databook5 小时前
Manim实现闪光轨迹特效
后端·python·动效
武子康6 小时前
大数据-98 Spark 从 DStream 到 Structured Streaming:Spark 实时计算的演进
大数据·后端·spark
该用户已不存在6 小时前
6个值得收藏的.NET ORM 框架
前端·后端·.net