【JavaEE】Spring Boot 日志详解

一 日志概述

  • 日志是用于记录系统运行状态、用户操作和重大事件的工具。
1.日志的用途
  1. 系统监控
    监控现在几乎是一个成熟系统的标配, 我们可以通过日志记录这个系统的运行状态, 每⼀个方法的响应时间, 响应状态等, 对数据进行分析, 设置不同的规则, 超过阈值时进行报警. 比如统计日志中关键字的数量,并在关键字数量达到一定条件时报警,这也是日志的常见需求之⼀
  2. 数据采集
    数据采集是⼀个比较大的范围, 采集的数据可以作用在很多方面, 比如数据统计, 推荐排序等
    • 数据统计: 统计页面的浏览量(PV), 访客量(UV), 点击量等, 根据这些数据进行数据分析, 优化公司运营策略
    • 推荐排序: 目前推荐排序应用在各个领域, 我们经常接触的各行各业很多也都涉及推荐排序, 比如购物, 广告, 新闻等领域. 数据采集是推荐排序工作中必须做的一环, 系统通过日志记录用户的浏览历史, 停留时长等, 算法人员通过分析这些数据, 训练模型, 给用户做推荐.
  3. 日志审计
    随着互联网的发展,众多企业的关键业务越来越多的运行于网络之上. 网络安全越来越受到大家的关注, 系统安全也成为了项目中的⼀个重要环节, 安全审计也是系统中非常重要的部分. 国家的政策法规、行业标准等都明确对日志审计提出了要求. 通过系统日志分析,可以判断一些非法攻击, 非法调用,以及系统处理过程中的安全隐患.
2.日志的类型
  • 诊断日志:记录请求入口出口、外部服务调用、资源消耗操作等,有助于技术团队理解和解决具体问题。
  • 统计日志:涉及用户访问统计和计费信息,对分析产品使用模式和进行计费非常重要。
  • 审计日志:记录管理操作和安全事件,对维护系统的安全性和合规性至关重要。
  • 操作日志:记录系统操作员的操作轨迹,为后续审计和问题追踪提供依据。
  • 安全日志:专注于记录登录信息、权限变更等安全相关事件。

二.打印日志

@RequestMapping("/logger")
@RestController

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

    @RequestMapping("/test")
    public String test() {
        logger.info("------------打印日志---------------");
        return "success";
    }
}
 

在这里插入图片描述

1.SLF4J
  • 即简单日志门面(Simple Logging Facade for Java),是一个抽象层,使得用户可以在不修改代码的情况下切换底层的日志系统。这极大地方便了开发人员在不同的日志系统间进行选择和迁移, 允许用户在部署其应用程序时插入所希望的日志系统。它自身不直接实现日志功能,而是提供了一个通用的API,通过这个API可以接入多种不同的日志框架
  • SLF4J的主要特点
    • 门面模式的应用:SLF4J是门面模式的典型应用,它本身不包含业务逻辑,而是定义了一组接口并将客户端请求委派给相应的日志实现框架处理。
    • 灵活的日志系统切换:通过更换相应的适配器,可以在不同日志系统如Log4j, java.util.logging等之间自由切换,而无需修改应用程序代码。
2.门面模式(外观模式)
  • 门面模式(Facade Pattern)又称为外观模式, 提供了一个统一的接口, 用来访问子系统中的一群接口.
  • 门面模式主要包含2种角色:
    • 外观角色(Facade): 也称门面角色,系统对外的统一接口.
    • ⼦系统角色(SubSystem): 可以同时有⼀个或多个 SubSystem. 每个 SubSytem 都不是一个单独的类,而是⼀个类的集合. SubSystem 并不知道 Facade 的存在, 对于 SubSystem 而言, Facade 只是另一个客户端而已(即 Facade 对 SubSystem 透明)

在这里插入图片描述
举个例子比如去医院看病,可能要去挂号, 门诊, 化验, 取药, 让患者或患者家属觉得很复杂, 如果有提供接待人员, 只让接待人员来处理, 就很方便.
在这里插入图片描述

  • 门面模式的优点:
    • 减少了系统的相互依赖. 实现了客户端与子系统的耦合关系, 这使得子系统的变化不会影响到调用它的客户端;
    • 提高了灵活性, 简化了客户端对子系统的使用难度, 客户端无需关心子系统的具体实现方式, 而只需要和门面对象交互即可.
    • 提高了安全性. 可以灵活设定访问权限, 不在门面对象中开通方法, 就无法访问.

三.日志格式详细说明

在这里插入图片描述

    1. 时间日期:精确到毫秒
    1. 日志级别:ERROR, WARN, INFO, DEBUG 或TRACE
    1. 进程ID
    1. 线程名
    1. Logger名(通常使⽤源代码的类名)
    1. 日志内容
日志级别

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

  • FATAL: 致命信息,表示需要立即被处理的系统级错误.
  • ERROR: 错误信息, 级别较高的错误日志信息, 但仍然不影响系统的继续运行.
  • WARN: 警告信息, 不影响使用, 但需要注意的问题
  • INFO: 普通信息, 用于记录应用程序正常运行时的一些信息, 例如系统启动完成、请求处理完成等.
  • DEBUG: 调试信息, 需要调试时候的关键信息打印.
  • TRACE: 追踪信息, 比DEBUG更细粒度的信息事件(除非有特殊用意,否则请使用DEBUG级别替代)


==日志级别通常和测试人员的Bug级别没有关系.==日志级别是开发人员设置的, 用来给开发人员看的. 日志级别的正确设置, 也与开发人员的工作经验有关. 如果开发人员把error级别的日志设置成了info, 就很有可能会影响开发人员对项目运行情况的判断. 出现error级别的日志信息较多时, 可能也没有任何问题. 测试的bug级别更多是依据现象和影响范围来判断

@RequestMapping("/logger")
@RestController
public class LoggerController {
    private static Logger logger = LoggerFactory.getLogger(LoggerController.class);
    @RequestMapping("/level")
    public String level() {
        logger.error("-----------error级别的日志------------");
        logger.warn("-----------warn级别的日志------------");
        logger.info("-----------info级别的日志------------");
        logger.debug("-----------debug级别的日志------------");
        logger.trace("-----------trace级别的日志------------");
        return "success";
    }
}

在这里插入图片描述
结果发现, 只打印了info, warn和error级别的日志
这与日志级别的配置有关, 日志的输出级别默认是 info级别, 所以只会打印大于等于此级别的日志, 也就是info, warn和error.

四.日志配置

  • 日志的配置只需要在application.yml或者application.properties里面设置相应的配置即可.
1.配置日志的输出级别

properties日志设置,设置日志级别为debug

logging.level.root: debug

yml日志设置,设置日志级别为debug

logging:
 level:
 root: debug

在这里插入图片描述

2.配置日志的持久化存储
  • 以上的日志都是输出在控制台上的, 然而在线上环境中, 我们需要把日志保存下来, 以便出现问题之后追溯问题. 把日志保存下来就叫持久化.
  • 日志持久化有两种方式:
      1. 配置日志文件名
      1. 配置日志的存储目录
        在这里插入图片描述
  1. 配置日志文件的路径和文件名:

properties日志设置

logging.file.name: logger/springboot.log

yml日志设置
logging:
file:
name: logger/springboot.log

在这里插入图片描述

  1. 配置日志文件的保存路径

properties日志设置

logging.file.path: logger

yml日志设置

logging:
  file:
    path: logger

在这里插入图片描述

注意:

  1. logging.file.name 和 logging.file.path 两个都配置的情况下, 只生效其⼀, 以logging.file.name 为准.
  2. logging.file.name既能设置路径也能设置名称, logging.file.path只能设置路径默认的文件路径名为spring.log
3.配置日志文件分割
  • 如果我们的日志都放在一个文件中, 随着项目的运行, 日志文件会越来越大, 需要对日志文件进行分割.
  • 当然, 日志框架也帮我们考虑到了这一点, 所以如果不进行配置, 就走自动配置,默认日志文件超过10M就进分割.
    在这里插入图片描述
    更多详细配置可以去官网查看:
    https://springdoc.cn/spring-boot/application-properties.html#application-properties.core.logging.logback.rollingpolicy.file-name-pattern

配置日志文件分割:Properties配置

logging.logback.rollingpolicy.file-name-pattern=${LOG_FILE}.%d{yyyy-MM-dd}.%i
logging.logback.rollingpolicy.max-file-size=1KB

配置日志文件分割:yml配置

logging:
 logback:
 rollingpolicy:
 max-file-size: 1KB
 file-name-pattern: ${LOG_FILE}.%d{yyyy-MM-dd}.%i
3.配置日志格式
  • 控制台日志格式:

    1. 配置项:logging.pattern.console
    2. 默认值:
      %clr(%d{KaTeX parse error: Unexpected character: '' at position 33: …ATTERN:-yyyy-MM̲dd'T'HH:mm:ss.S…{LOG_LEVEL_PATTERN:-%5p}) %clr( P I D : − ) m a g e n t a f a i n t {PID:- }){magenta} %clr(---){faint} %clr([%15.15t]) {faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n PID:)magentafaint{LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
  • 日志文件的日志格式:

    1. 配置项:logging.pattern.file
    2. 默认值:%d{${LOG_DATEFORMAT_PATTERN:-yyyy-MMdd’T’HH:mm:ss.SSSXXX}} ${LOG_LEVEL_PATTERN:-%5p} P I D : − − − − [ {PID:- }--- [%t] %-40.40logger{39}:%m%n PID:[{LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
  • 配置项说明:

    1. %clr(表达式){颜色} 设置输入日志的颜色 默认支持blue cyan faint green magenta red yellow这几种颜色.

    2. %d{${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd’T’HH:mm:ss.SSSXXX}} 日期和时间–精确到毫秒.

      %d{} ⽇期
      ${LOG_DATEFORMAT_PATTERN:-yyyy-MM-dd’T’HH:mm:ss.SSSXXX} 非空表达式, 获取
      系统属性 LOG_DATEFORMAT_PATTERN , 若属性 LOG_DATEFORMAT_PATTERN 不存在,则使
      用 -yyyy-MM-dd HH:mm:ss.SSSXXX 格式, 系统属性可以
      System.getProperty(“LOG_DATEFORMAT_PATTERN”) 获取

    3. %5p 显示日志级别ERROR,MARN,INFO,DEBUG,TRACE.

    4. %t 线程名. %c 类的全限定名. %M method. %L 为行号. %thread 线程名称. %m 或者%msg 显示输出消息. %n 换行符

    5. %5 若字符长度小于5,则右边用空格填充. %-5 若字符长度小于5,则左边用空格填充. %.15 若字符长度超过15,截去多余字符. %15.15 若字符长度小于15,则右边用空格填充. 若字符长度超过15,截取多余字符

日志格式Properties配置

logging.pattern.console='%d{yyyy-MM-dd HH:mm:ss.SSS} %C %M %L [%thread] %m%n'

日志格式yml配置

logging:
 pattern:
 console: '%d{yyyy-MM-dd HH:mm:ss.SSS} %c %M %L [%thread] %m%n'
 file: '%d{yyyy-MM-dd HH:mm:ss.SSS} %C %M %L [%thread] %m%n'

五.更简单的日志输出.

  • 每次都使用 LoggerFactory.getLogger(xxx.class) 很繁琐, 且每个类都添加⼀遍, lombok给我们提供了一种更简单的方式
    • 添加 lombok 框架支持
    • 使用 @slf4j 注解输出日志

Lombok依赖:

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

使用注解:

import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.RestController;
@Slf4j
@RestController
public class LogController {
 public void log(){
 log.info("--------------要输出⽇志的内容----------------");
 }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/683644.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

科技赋能,无障碍出行的新纪元

在现代社会&#xff0c;公共设施的建设不仅是衡量城市文明程度的标尺&#xff0c;更是实现社会公平与包容的重要载体。对于盲人群体而言&#xff0c;一个完善的公共设施网络&#xff0c;意味着他们能够更加独立、自信地融入社会&#xff0c;享受与视力健全者同等的公共服务与便…

湖南(品牌控价)源点调研 手机价格管理对品牌的影响分析

前言&#xff1a;手机自发明以来&#xff0c;过去一直是国际品牌占主导地位&#xff0c;从最初的爱立信、摩托罗拉&#xff0c;到后来的诺基亚、三星&#xff0c;苹果在这个手机行业里&#xff0c;竞争激励&#xff0c;没有百年企业&#xff0c;每个品牌的盛衰都有背后的历史背…

软件测试——Java自动化测试Selenium

目录 1.运行环境 2.环境配置 3.第一个浏览器程序 4.浏览器操作 5.元素定位 6.元素操作常用API 7.特殊元素定位与操作 8.元素三大等待 9.iframe操作 10.window操作 11.select选择框 12.js语句执行 13.鼠标操作 14.截图操作 1.运行环境 编译工具&#xff1a;IDEA …

教师自费出书的注意事项有哪些?

备案主编专著的优势&#xff1a;&#xff08;qkfb88688&#xff09; 1、副高、正高职称最高学术成果 2、专著可以代替核心 3、周期短、出书快、可重复使用 4、双号齐全&#xff1a;ISBN&#xff5e;CIP 5、版权长期有效 教师自费出书有以下一些注意事项&#xff1a; 关于书稿&…

python---正则表达式

本章目标: 1:能够知道在Python中使用正则要导入的模块; [了解] re模块 2:能够使用re模块匹配单个字符; [重点] \d \w 正则表达式的概述: 基本介绍 正则表达式,也叫做规则表达式,通常会说成[正则] 实际上正则表达式就是指符合一定规则的字符串,同时他能用于检查一段…

MyBatis拦截器使用方法

前言 MyBatis拦截器可以做的工作&#xff1a;SQL修改&#xff0c;分页操作&#xff0c;数据过滤&#xff0c;SQL执行时间性能监控等。 1. 基础介绍 1.1. 核心对象 从MyBatis代码实现的角度来看&#xff0c;MyBatis的主要的核心部件有以下几个&#xff1a; Configuration&am…

OpenStack所支持的虚拟化技术和KVM、Xen、Hyer-V、QEMU、Libvirt说明

OpenStack所支持的虚拟化技术主要包括以下几种&#xff1a; KVM (Kernel-based Virtual Machine): 基于Linux内核的虚拟化技术。在Linux内核中添加一个虚拟化模块来实现虚拟机的运行。是OpenStack用户使用较多的虚拟化技术&#xff0c;支持OpenStack的所有特性。通过QEMU模拟器…

【NoSQL数据库】Redis——哨兵模式

Redis——哨兵模式 Redis哨兵 Redis——哨兵模式1.什么是哨兵机制&#xff08;Redis Sentinel&#xff09;1.1 哨兵的作用 2.哨兵的运行机制3.故障处理redis常见问题汇总1、redis缓存击穿是什么&#xff1f;如何解决&#xff1f;2、redis缓存穿透是什么&#xff1f;如何解决&am…

详解!Python怎么配置环境变量

详解&#xff01;Python怎么配置环境变量 许多刚开始学习编程的初学者在 python的安装上会抱有一定的疑惑&#xff0c;为什么明明已经安装好了 python 环境&#xff0c;但并不能运行python 代码&#xff0c;这是因为 python 的安装过程中还有一步环境变量的配置&#xff0c;接…

微信“对方正在输入”背后的小心思:保持隐秘感,享受宁静的交流

微信&#xff0c;这个伴随我们起居、工作的超级应用&#xff0c;不仅仅是一款聊天软件&#xff0c;它几乎成为了我们社交生活的一部分。它的便捷&#xff0c;让我们的日常沟通如鱼得水。然而&#xff0c;在这个几乎完美的社交工具中&#xff0c;有一个功能&#xff0c;让不少人…

CSS真题合集(二)

CSS真题合集&#xff08;二&#xff09; 11. css3新增特性12. css3动画12.1 关键帧动画 (keyframes)12.2 animation12.3 transition12.4 transform 13. grid网格布局13.1 使用display: grid或display: inline-grid的HTML元素。13.2 定义网格13.3 13.4 自动填充和自动放置13.4 对…

信号发生器如何将频率调大,步尽值改成10

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

PPT文件损坏且无法读取怎样修复?文档损坏修复方法推荐

PPT文件已经成为工作汇报、商务演示、学术交流以及教学培训中最常用到的文件&#xff0c;随着文件数量的增多和存储设备的频繁使用&#xff0c;我们有时会遇到PPT文件损坏无法打开的情况&#xff0c;这无疑给工作和学习带来了极大的困扰。 PPT文件损坏的原因可能多种多样&#…

FreeRTOS手表项目多级菜单的实现

一、首先介绍一下智能手表项目的背景&#xff1a; 如图&#xff0c;关注焦点是任务&#xff1a; 1、在一个确定时刻&#xff0c;在那一圈任务中&#xff08;写有只有一个任务解挂&#xff09;只有一个任务处在运行&#xff0c;界面显示的是该任务应该显示的内容&#xff1b; …

韩国Neowine推出第三代强加密芯片ALPU-CV

推出第三代加密芯片&#xff1b;是ALPU系列中的高端IC&#xff1b;是一款高性能车规级加密芯片&#xff1b;其加密性更强、低耗电、体积小&#xff1b;使得防复制、防抄袭板子的加密性能大大提升&#xff0c;该芯片通过《AEC-Q100》认证&#xff0c;目前已经在国产前装车辆配件…

代理记账公司哪家好,深度剖析与选择指南

代理记账&#xff0c;作为企业会计管理和运营的重要环节&#xff0c;已经逐渐被越来越多的企业所重视&#xff0c;在众多的代理记账公司中&#xff0c;如何选择一家专业、高效且值得信赖的代理记账机构呢&#xff1f;以下是一些深度解析和推荐。 公司的规模 规模较大的代理记账…

docker实战命令大全

文章目录 1 环境准备1.1 移除旧版本Docker1.2安装工具包1.3配置docker yum源 2 安装最新docker2.1 设置开机自启docker2.2配置加速器 3 实操-镜像3.1搜索镜像3.2下载镜像3.3查看镜像3.4 删除镜像 4 实操-容器4.1运行nginx容器4.2 查看容器4.3启动容器4.5关闭容器4.6查看容器日志…

Linux中Apache网站基于Http服务的访问限制(基于地址/用户)

&#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f468;‍&#x1f4bb;Linux高级管理专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年6月3日11点44分 &#x1f004;️文章质量&#xff1a;95分 为了更好地控制对网站资源的访问&#xff0c;可…

基于SSM+Jsp的高校二手交易平台

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

前端怎么预览pdf

1.背景 后台返回了一个在线的pdf地址&#xff0c;需要我这边去做一个pdf的预览&#xff08;需求1&#xff09;&#xff0c;并且支持配置是否可以下载&#xff08;需求2&#xff09;&#xff0c;需要在当前页就能预览&#xff08;需求3&#xff09;。之前我写过一篇预览pdf的文…