首页 > 其他分享 >Spring Boot日志

Spring Boot日志

时间:2024-11-04 17:51:36浏览次数:3  
标签:框架 Spring 打印 Boot System 模式 日志 public out

 博主主页: 码农派大星.

    数据结构专栏:Java数据结构

 数据库专栏:MySQL数据库

JavaEE专栏:JavaEE

软件测试专栏:软件测试

关注博主带你了解更多知识

目录

1. ⽇志概述

1.1 ⽇志的⽤途

1. 系统监控

2. 数据采集

3. ⽇志审计

2. ⽇志使⽤

2.1 打印⽇志

2.1.1 在程序中得到⽇志对象

2.1.2 使⽤⽇志对象打印⽇志

2.2 ⻔⾯模式(外观模式)

 ⻔⾯模式的优点:

门面模式和模板模式:

灵活性比较:

2.3 SLF4J 框架

不引⼊⽇志⻔⾯

引⼊⽇志⻔⾯ 

2.4⽇志级别

2.4.1 日志级别分类

2.4.2 ⽇志级别的使⽤ 

2.5 日志配置 

2.5.1 配置⽇志级别

2.5.2 ⽇志持久化 

2.5.3 配置⽇志⽂件分割 

3. 添加lombok依赖


 

1. ⽇志概述

⽇志对我们来说并不陌⽣,从JavaSE部分,我们就在使⽤ System.out.print 来打印⽇志了.通过打 印⽇志来发现和定位问题,或者根据⽇志来分析程序的运⾏过程.在Spring的学习中,也经常根据控制台 的⽇志来分析和定位问题.随着项⽬的复杂度提升,我们对⽇志的打印也有了更⾼的需求,⽽不仅仅是定位排查问题. ⽐如需要记录⼀些⽤⼾的操作记录,也可能需要使⽤⽇志来记录⽤⼾的⼀些喜好, 把⽇志持久化,后续进⾏数据分析等.但是 System.out.print 不能很好的满⾜我们的需求,我们就需要使⽤⼀些专⻔⽇志框架

1.1 ⽇志的⽤途

1. 系统监控

监控现在⼏乎是⼀个成熟系统的标配, 我们可以通过⽇志记录这个系统的运⾏状态,每⼀个⽅法的响应 时间,响应状态等,对数据进⾏分析,设置不同的规则,超过阈值时进⾏报警.⽐如统计⽇志中关键字的数 量,并在关键字数量达到⼀定条件时报警,这也是⽇志的常⻅需求之⼀

2. 数据采集

推荐排序: ⽬前推荐排序应⽤在各个领域,我们经常接触的各⾏各业很多也都涉及推荐排序,⽐如购 物,⼴告,新闻等领域.数据采集是推荐排序⼯作中必须做的⼀环,系统通过⽇志记录⽤⼾的浏览历 史,停留时⻓等,算法⼈员通过分析这些数据,训练模型,给⽤⼾做推荐 

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

3. ⽇志审计

随着互联⽹的发展,众多企业的关键业务越来越多的运⾏于⽹络之上.⽹络安全越来越受到⼤家的关 注,系统安全也成为了项⽬中的⼀个重要环节, 安全审计也是系统中⾮常重要的部分.国家的政策法规、 ⾏业标准等都明确对⽇志审计提出了要求.通过系统⽇志分析,可以判断⼀些⾮法攻击,⾮法调⽤,以 及系统处理过程中的安全隐患

2. ⽇志使⽤

SpringBoot 内置了⽇志框架 Slf4j ,我们可以直接在程序中调⽤ Slf4j 来输出⽇志

Slf4j 打印的⽇志和 System.out.print 有什么不同:

我们通过 System.out.print 打印的⽇志,⽐SpringBoot 内置了⽇志框架打印的⽇志缺少了很多信息

2.1 打印⽇志

2.1.1 在程序中得到⽇志对象

在程序中获取⽇志对象需要使⽤⽇志⼯⼚LoggerFactory

private static Logger logger = LoggerFactory.getLogger(LoggerController.class);

 

LoggerFactory.getLogger 需要传递⼀个参数,标识这个⽇志的名称.这样可以更清晰的知道是哪个 输出的⽇志.当有问题时,可以更⽅便直观的定位到问题类

Logger对象是属于org.slf4j包下的,不要导⼊错包

2.1.2 使⽤⽇志对象打印⽇志

@RequestMapping("/log")
@RestController
public class LoggerController {
    private static Logger logger =LoggerFactory.getLogger(LoggerController.class);

    @PostConstruct
    public void print(){
        System.out.println("================");
        System.out.println("打印日志");
        logger.info("打印日志");

    }

}

2.2 ⻔⾯模式(外观模式)

SLF4J是门面模式的典型应用(但不仅仅使用门面模式)

⻔⾯模式⼜称为外观模式,提供了⼀个统⼀的接⼝,⽤来访问⼦系统中的⼀群接⼝. 其主要特征是定义了⼀个⾼层接⼝,让⼦系统更容易使⽤同时隐藏了系统的复杂性。这种模式通常用于简化客户端与复杂系统的交互,隐藏系统的内部结构

门面模式实现:

比如说我回家,我们会开各个屋的灯.离开家时,会关闭各个屋的灯 如果家⾥设置⼀个总开关,来控制整个屋的灯就会很⽅便

public class FacadePatternDemo {
 public static void main(String[] args) {
 //调用门面
 LightFacade lightFacade = new LightFacade();
 lightFacade.lightOn();
 }
}
//灯的门面
class LightFacade{
 private Light livingRoomLight = new LivingRoomLight();
 private Light hallLight = new HallLight();
 private Light diningLight = new DiningLight();
 public void lightOn(){
 livingRoomLight.on();
 hallLight.on();
 diningLight.on();
 }
 public void lightOff(){
 livingRoomLight.off();
 hallLight.off();
 diningLight.off();
 }
}
//客厅灯
class LivingRoomLight implements Light{
 @Override
 public void on() {
 System.out.println("打开客厅灯");
 }
 @Override
 public void off() {
 System.out.println("关闭客厅灯");
 }
}
//走廊灯
class HallLight implements Light{
 @Override
 public void on() {
 System.out.println("打开⾛廊灯");
 }
 @Override
 public void off() {
 System.out.println("关闭⾛廊灯");
 }
 //餐厅灯
 class DiningLight implements Light{
 @Override
 public void on() {
 System.out.println("打开餐厅灯");
 }
 @Override
 public void off() {
 System.out.println("关闭餐厅灯");
 }
}

 ⻔⾯模式的优点:

减少了系统的相互依赖.实现了客⼾端与⼦系统的耦合关系,这使得⼦系统的变化不会影响到调⽤它 的客⼾端,

门面模式将客户端与子系统解耦,客户端只需要与门面接口交互,而不是直接与子系统中的多个组件交互。

提⾼了灵活性,简化了客⼾端对⼦系统的使⽤难度,客⼾端⽆需关⼼⼦系统的具体实现⽅式,⽽只需 要和⻔⾯对象交互即可

提⾼了安全性.可以灵活设定访问权限,不在⻔⾯对象中开通⽅法,就⽆法访问

门面模式和模板模式:

门面模式提供了一个统一的接口来访问一个子系统中的一组操作,代码层面就是接口

模板模式定义了一个模板方法,代码层面上就是抽象类,定义一些基本的方法,供子类实现或重写

父类中定义的模板方法提供了一个通用的框架,可以在多个子类中复用

门面模式的目的是简化客户端与复杂子系统的交互,而模板模式的目的是定义一些模版框架,让子类实现具体的操作

门面模式通常通过创建一个高层次的接口来实现,而模板模式则通过在抽象类中定义一个模板方法来实现

门面模式隐藏了子系统的复杂性,客户端不需要知道子系统的具体实现;模板模式则提供了操作的模版框架,子类只需要遵循这个框架来实现具体的步骤

灵活性比较:

模板模式 提供了在固定算法结构内的灵活性,允许子类定制算法的某些步骤,但不允许改变算法的整体结构。这种灵活性适用于需要保持算法结构一致性的场景。

门面模式 提供了在客户端和复杂子系统之间的灵活性,允许客户端通过一个简单的接口与系统交互,而不需要了解子系统的内部复杂性。这种灵活性适用于需要简化客户端与复杂系统交互的场景。

2.3 SLF4J 框架

SLF4J 就是其他⽇志框架的⻔⾯.SLF4J可以理解为是提供⽇志服务的统⼀API接⼝,并不涉及到具体的⽇志逻辑实现

不引⼊⽇志⻔⾯

常⻅的⽇志框架有log4J,logback等.如果⼀个项⽬已经使⽤了log4j,⽽你依赖的另⼀个类库,假如是 ApacheActive MQ,它依赖于另外⼀个⽇志框架logback,那么你就需要把logback也加载进去

存在问题:

1. 不同⽇志框架的API接⼝和配置⽂件不同,如果多个⽇志框架共存,那么不得不维护多套配置⽂件(这 个配置⽂件是指⽤⼾⾃定义的配置⽂件).

2. 如果要更换⽇志框架,应⽤程序将不得不修改代码,并且修改过程中可能会存在⼀些代码冲突.

3. 如果引⼊的第三⽅框架,使⽤了多套,那就不得不维护多套配置 引⼊⽇志⻔⾯

引⼊⽇志⻔⾯ 

引⼊⻔⾯⽇志框架之后,应⽤程序和⽇志框架(框架的具体实现)之间有了统⼀的API接⼝(⻔⾯⽇志框架 实现),此时应⽤程序只需要维护⼀套⽇志⽂件配置,且当底层实现框架改变时,也不需要更改应⽤程序代码.

SLF4J 就是这个⽇志⻔⾯

SLF4J使你的代码独⽴于任意⼀个特定的⽇志API,这是⼀个对于开发API的开发者很好的思想 

2.4⽇志级别

2.4.1 日志级别分类

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

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

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

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

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

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

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

2.4.2 ⽇志级别的使⽤ 

@RequestMapping("/log")
@RestController
public class LoggerController {
    private static Logger logger =LoggerFactory.getLogger(LoggerController.class);

    @PostConstruct
    public void print(){
        System.out.println("================");
        System.out.println("打印日志");
        logger.info("打印日志");
        logger.trace("================= trace ===============");
        logger.debug("================= debug ===============");
        logger.info("================= info ===============");
        logger.warn("================= warn ===============");
        logger.error("================= error ===============");

    }

}

结果发现,只打印了info,warn和error级别的⽇志

这与⽇志级别的配置有关, ⽇志的输出级别默认是info级别,所以只会打印⼤于等于此级别的⽇志,也就 是info, warn和error

2.5 日志配置 

2.5.1 配置⽇志级别

⽇志级别配置只需要在配置⽂件中设置"logging.level"配置项

yml配置:

logging:
  level:
    com:
      VerificationCode:
        demo: trace

2.5.2 ⽇志持久化 

把⽇志保存下来就叫持久化

yml配置:

level:
  file:
    path: E:/temp

 给配置文件命名:

logging: 
   file:
     name: lxy

 

logging: 
   file:
     name: logger/lxy.log

2.5.3 配置⽇志⽂件分割 

默认⽇志⽂件超过10M就进⾏分割

logging.logback.rollingpolicy.max-file-size
logging.logback.rollingpolicy.file-name-pattern

 

3. 添加lombok依赖

每次都使⽤LoggerFactory.getLogger(xxx.class) 很繁琐,且每个类都添加⼀遍,lombok给我们提供了 ⼀种更简单的⽅式

1.添加lombok框架⽀持

<dependency>
			<groupId>org.projectlombok</groupId>
			<artifactId>lombok</artifactId>
			<optional>true</optional>
</dependency>

2.使⽤ @slf4j 注解输出⽇志

成功输出⽇志: 

 

 

标签:框架,Spring,打印,Boot,System,模式,日志,public,out
From: https://blog.csdn.net/jj666mhhh/article/details/143452167

相关文章

  • spring-framework的StopWatch类详解,每个方法带有具体的例子
    目录简介:StopWatch类的应用场景:StopWatch类提供了以下一些主要方法:start():stop():reset():split():unsplit():getTime():getStartTime():toString():isStarted():isStopped():示例代码:以下是一个使用StopWatch测量代码执行时间的简单示例:以下是一个使用StopWatch类的复杂示例,该示例演......
  • Springboot+MyBatis批量插入数据的三种方式
    1.背景介绍在开发过程中,我们经常会遇到往数据库表中插入大量数据的场景,比如excel批量导入数据。那么该如何快速地插入数据呢?我们可以考虑使用批量插入来实现,实测100000条数据添加,后附具体实现代码。2.方案介绍2.1第一种方案,用for语句循环插入(不推荐)用一个for循环,把数据......
  • SpringBoot数字迎新系统u0p2s 本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1
    题目:SpringBoot数字迎新系统u0p2s进度安排:(1)2024年11月1日-2024年11月15日 确定选题,下达任务书,撰写开题报告;(2)2024年11月15日-2024年12月20日提交开题报告定稿;(3)2024年12月21日-2025年3月14日 完成选题的设计、论文大纲的撰写;(4)2025年3月15日-2025年3月21日  毕业(设......
  • SpringBoot时间管理系统quqp0 本系统(程序+源码+数据库+调试部署+开发环境)
    开题报告内容一、课题背景与意义在信息爆炸和工作节奏日益加快的今天,时间管理成为个人和组织高效运作的关键因素。然而,很多人面临时间分配不合理、任务拖延、工作效率低下等问题。因此,开发一套科学、智能的时间管理系统,帮助用户合理规划时间、提高工作效率,具有重要的现实意义......
  • SpringBoot生活艺术馆管理系统4b9eu 本系统(程序+源码+数据库+调试部署+开发环境)带论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表系统内容:用户,员工,类别,藏品信息,出库登记,入库登记,藏品修复开题报告内容一、项目背景与意义随着人们精神文化生活需求的日益增长,生活艺术馆作为艺术、文化......
  • 基于springboot+vue实现的公司财务管理系统(源码+L文+ppt)4-102
     基于springboot+vue实现的公司财务管理系统(源码+L文+ppt)4-102摘要本系统是基于SpringBoot框架开发的公司财务管理系统,该系统包含固定资产管理、资产申领管理、资产采购管理、员工工资管理等功能。公司财务管理系统是一种帮助公司进行有效资金管理、会计处理和财务监控的......
  • 基于springboot+vue实现的网上预约挂号管理系统 (源码+L文+ppt)4-104
      结合现有六和医院网上预约挂号管理系统的特点,应用新技术,构建了六和医院网上预约挂号管理系统。首先从需求出发,对目前传统的六和医院网上预约挂号管理进行了详细的了解和分析。根据需求分析结果,对系统进行了设计,并划分为管理员、用户和医生三个角色:主要功能包括用户、医生......
  • 基于springboot+vue实现的网上预约挂号管理系统 (源码+L文+ppt)4-104
      结合现有六和医院网上预约挂号管理系统的特点,应用新技术,构建了六和医院网上预约挂号管理系统。首先从需求出发,对目前传统的六和医院网上预约挂号管理进行了详细的了解和分析。根据需求分析结果,对系统进行了设计,并划分为管理员、用户和医生三个角色:主要功能包括用户、医生......
  • 基于springboot+vue实现的网上预约挂号管理系统 (源码+L文+ppt)4-104
      结合现有六和医院网上预约挂号管理系统的特点,应用新技术,构建了六和医院网上预约挂号管理系统。首先从需求出发,对目前传统的六和医院网上预约挂号管理进行了详细的了解和分析。根据需求分析结果,对系统进行了设计,并划分为管理员、用户和医生三个角色:主要功能包括用户、医生......
  • 基于springboot+vue实现的任务管理系统(源码+L文)4-103
      第4章系统设计4.1总体功能设计员工,经理,管理员都需要登录才能进入任务管理系统,使用者登录时会在后台判断使用的权限类型,包括一般使用者和管理者,一般使用者为员工和经理,对员工只能提供任务信息显示查询,对经理还有部分修改功能,而对管理者则能基本全部任务信息内容提供......