【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日志");
    }
}
相关推荐
罗政18 分钟前
PDF书籍《手写调用链监控APM系统-Java版》第12章 结束
java·开发语言·pdf
GraduationDesign22 分钟前
基于SpringBoot的蜗牛兼职网的设计与实现
java·spring boot·后端
今天不学习明天变拉吉31 分钟前
大批量数据导入接口的优化
java·excel
小手cool32 分钟前
取多个集合的交集
java
颜淡慕潇33 分钟前
【K8S问题系列 | 20 】K8S如何删除异常对象(Pod、Namespace、PV、PVC)
后端·云原生·容器·kubernetes
全栈老实人_34 分钟前
农家乐系统|Java|SSM|VUE| 前后端分离
java·开发语言·tomcat·maven
customer0837 分钟前
【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)
java·vue.js·spring boot·后端·kafka·开源·旅游
点点滴滴的记录1 小时前
Java的CompletableFuture实现原理
java·开发语言·javascript
xiaolingting1 小时前
Java 引用是4个字节还是8个字节?
java·jvm·引用·指针压缩
一只傻小白,1 小时前
JAVA项目中freemarker静态模板技术
java·开发语言