Spring Boot日志

博主主页:码农派大星.

数据结构专栏: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 注解输出志

成功输出志:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值