当前位置: 首页 > news >正文

springboot实战(五)之sql业务日志输出,重要

目录

环境:

一、mybatis-plus之sql分析日志输出

1.配置

 2.验证

3.高级输出方式

二、业务日志输出到文件

1.添加log4j2依赖

2.排除logback依赖

3.新增log4j2的配置文件

4.添加配置

5.启动测试

6.给日志请求加个id

6.1、过滤器filter实现

6.2、测试

6.3、request_id检索方式

7.结束


环境:

jdk:1.8

springboot版本:2.7.15

mybatis-plus版本:3.5.3.2

一、mybatis-plus之sql分析日志输出

为了生产中更快的分析问题以及解决问题,sql输出是非常有必要的,这里第一步是将sql输出到控制台便于调试时分析问题,优化sql

1.配置

日志输出操作很简单,在application.yml中配置:

mybatis-plus:configuration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpl

 2.验证

使用测试类进行测试,注意,本地调试可以使用这种方式打开日志,如果线上日志输出到文件,要用下面的高级输出方式

3.高级输出方式

使用数据库操作分析框架p6spy组件,进行sql分支,但是该组件比较消耗性能,生产环境中不建议使用,但是如果想玩玩的话,大家可以试试。

p6spy快速配置:p6spy快速配置

二、业务日志输出到文件

为什么要进行日志输出呢?

因为生产环境想要知道程序是否是按照我们的意愿正常运行的,通过日志输出是最直观最有效的方式。

日志文件输出我们一般常用日志输出框架有两种:一种是log4j2、另一种是logback。而springboot中默认使用的是logback框架,考虑到性能原因大多数生产环境使用日志框架为log4j2,所以这里也以log4j2框架进行整合和练习。

1.添加log4j2依赖

        <!-- 引入log4j2依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId></dependency><!-- 加上这个才能辨认到log4j2-*.yml文件 --><dependency><groupId>com.fasterxml.jackson.dataformat</groupId><artifactId>jackson-dataformat-yaml</artifactId></dependency>

为何用jackson-dataformat-yaml包?问就是可读性好~,log4j2官方采用的是.xml,.json或者.jsn这种方式来做配置,我们既然使用了springboot那当然要用yml文件来配置了,而这个包就是为了程序启动时辨认log4j2-*.yml文件的。

2.排除logback依赖

<!-- 全局排除spring-boot-starter-logging相关所有依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId><exclusions><exclusion><groupId>*</groupId><artifactId>*</artifactId></exclusion></exclusions></dependency>

3.新增log4j2的配置文件

Configuration:#Configuration后面的status,这个用于设置log4j2自身内部的信息输出,可以不设置,当设置成trace时,你会看到log4j2内部各种详细输出#日志级别以及优先级排序: ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFFstatus: info# 定义全局变量Properties:Property:#日志存放路径- name: log.pathvalue: /Users/liuph/dev/space/log/iterge_pre#定义日志输出目的地,内容和格式等Appenders:# 控制台日志Console:name: consoletarget: SYSTEM_OUT#输出日志的格式PatternLayout:Pattern: "[%X{request_id}] %-d{yyyy-MM-dd HH:mm:ss} - [%p] [%C{1}:%L %M] %m%n"ThresholdFilter:level: infoonMatch: ACCEPTonMismatch: DENY# 文件日志RollingFile:- name: iterge_pre#日志存储路径fileName: "${log.path}/info.log"#历史日志封存路径 其中%d{yyyy-MM-dd}表示了日志的时间单位是天filePattern: "${log.path}/iterge_pre_%d{yyyy-MM-dd}.log"PatternLayout:Pattern: "[%X{request_id}] %-d{yyyy-MM-dd HH:mm:ss} - [%p] [%C{1}:%L %M] %m%n"#归档设置Policies:#按时间间隔归档TimeBasedTriggeringPolicy:#时间间隔 单位由filePattern的%d日期格式指定, 此处配置代表每一天归档一次interval: 1#是否对interval取模,决定了下一次触发的时间点modulate: true#按照日志文件的大小: size表示当前日志文件的最大size,支持单位:KB/MB/GB#SizeBasedTriggeringPolicy:#size: 50MBThresholdFilter:level: infoonMatch: ACCEPTonMismatch: DENYLoggers:Root:level: info#关联的Appender, 只有定义了logger并引入的appender,appender才会生效AppenderRef:- ref: console- ref: iterge_pre

4.添加配置

在配置文件中添加需要生效的log4j2的配置信息,我这里生效的配置文件是application-dev.yml,所以我在application-dev.yml中加入以下配置代码:

#这里配置日志生效文件,用于多环境部署时切换(通常部署会有三个环境:线上、测试、开发)
logging:config: classpath:log4j2/log4j2-dev.yml

项目配置文件目录:

5.启动测试

如上图:日志打印格式已经按照我们配置的打印了,这里大家可能问这个“[]”是什么含义?接着往下看。

6.给日志请求加个id

为什么给日志请求加个id?这里当然是为了方便了,举个例子:当你在线上查询问题时,一段代码你你可能加了10个日志输出点,而线上业务日志又有很多的情况下,你难道要一行一行的检索日志来看吗?这时候当然请求id检索更香啊!

6.1、过滤器filter实现

新建过滤器LogTraceFilter,代码中的“request_id”要和log4j2的配置文件中设置的一致!!!

(这里通过拦截器实现也是可以的)

@WebFilter(filterName = "LogTraceFilter", urlPatterns = "/*")
@Component
public class LogTraceFilter implements Filter {@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {MDC.put("request_id", UUID.randomUUID().toString().replace("-", ""));filterChain.doFilter(servletRequest, servletResponse);MDC.remove("request_id");}}

6.2、测试

controller代码:

    @GetMapping("/test/get")public User getUser(Integer id){log.info("请求入参:{}",id);User user = userMapper.selectById(id);log.info("请求结果:{}",user.getName());log.info("你看,这样很明显知道我们是一次请求的log吧!");return user;}

运行结果: 

由此可以看出同一个请求的日志id都是相同的。

6.3、request_id检索方式

7.结束

相关文章:

springboot实战(五)之sql业务日志输出,重要

目录 环境&#xff1a; 一、mybatis-plus之sql分析日志输出 1.配置 2.验证 3.高级输出方式 二、业务日志输出到文件 1.添加log4j2依赖 2.排除logback依赖 3.新增log4j2的配置文件 4.添加配置 5.启动测试 6.给日志请求加个id 6.1、过滤器filter实现 6.2、测试 6.3、…...

redis7.2.0 centos源码编译安装并设置开机自启动

下载源码包 wget https://github.com/redis/redis/archive/7.2.0.tar.gz tar -zxf 7.2.0.tar.gz 编译编码 编译编码 cd redis-7.2.0 make && make install 此时默认redis-server redis-cli等命令行安装到目录/usr/local/bin/目录中。 如果你想安装命令行到指定目录中你…...

网易低代码引擎Tango正式开源

一、Tango简介 Tango 是一个用于快速构建低代码平台的低代码设计器框架,借助 Tango 只需要数行代码就可以完成一个基本的低代码平台前端系统的搭建。Tango 低代码设计器直接读取前端项目的源代码,并以源代码为中心,执行和渲染前端视图,并为用户提供低代码可视化搭建能力,…...

Apache Linkis 与 OceanBase 集成:实现数据分析速度提升

导语&#xff1a;恭喜 OceanBase 生态全景图中又添一员&#xff0c;Apache Linkis 构建了一个计算中间件层&#xff0c;以促进上层应用程序和底层数据引擎之间的连接、治理和编排。 近日&#xff0c;计算中间件 Apache Linkis 在其新版本中通过数据源功能&#xff0c;支持用户通…...

EXPLAIN概述与字段剖析

6. 分析查询语句&#xff1a;EXPLAIN(重点) 6.1 概述 定位了查询慢的sQL之后&#xff0c;我们就可以使用EXPLAIN或DESCRIBE 工具做针对性的分析查询语句。DESCRIBE语句的使用方法与EXPLAIN语句是一样的&#xff0c;并且分析结果也是一样的。 MySQL中有专门负责优化SELECT语句…...

基于Java IO 序列化方案的memcached-session-manager多memcached节点配置

session的序列化方案官方推荐的有4种 java serializationmsm-kryo-serializermsm-javolution-serializermsm-xstream-serializer 关于这几种&#xff0c;官方也给出了比较: Java serialization is very robust and a proven technology. The biggest disadvantage IMHO is th…...

LinkedList(3):并发异常

1 LinkedList并发异常 package com.example.demo;import java.util.Iterator; import java.util.LinkedList;public class TestLinkedList {public static void main(String[] args) {LinkedList linkedList new LinkedList(); //双向链表linkedList.add(11);linkedList.add(…...

vue里el-form+el-table实现验证规则的写法

vue里el-formel-table实现验证规则的写法 vue里el-formel-table实现验证规则的写法 vue里el-formel-table实现验证规则的写法 重点是因为使用el-form el-table与单独使用el-form时数据不同&#xff0c;前者是对象json数组&#xff0c;后者是对象&#xff0c;导致了el-form-ite…...

K8S 基础概念学习

1.K8S 通过Deployment 实现滚动发布&#xff0c;比如左边的ReplicatSet 的 pod 中 是V1版本的镜像&#xff0c;Deployment通过 再启动一个 ReplicatSet 中启动 pod中 镜像就是V2 2.每个pod 中都有一个pause 容器&#xff0c;他会连接本pod中的其他容器&#xff0c;实现互通。p…...

Java之正则表达式的详细解析

正则表达式 1.1 正则表达式的概念及演示 在Java中&#xff0c;我们经常需要验证一些字符串&#xff0c;例如&#xff1a;年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则&#xff0c…...

移动端的屏幕分辨率与浏览器的视口宽度(视口大小)是两回事儿

问&#xff1a;在移动端的Web设计中&#xff0c;屏幕的分辨率和视口大小是不是是两回事儿&#xff1f; 答&#xff1a; 是的&#xff0c;屏幕的分辨率和视口大小在移动端的Web设计中是两个不同的概念。 屏幕分辨率&#xff08;Screen Resolution&#xff09;&#xff1a;这指的…...

分布式 - 服务器Nginx:基础系列之Nginx静态资源优化配置指令sendfile | tcp_nopush | tcp_nodelay

文章目录 1. sendfile 指令2. tcp_nopush 指令3. tcp_nodelay 指令 1. sendfile 指令 请求静态资源的过程&#xff1a;客户端通过网络接口向服务端发送请求&#xff0c;操作系统将这些客户端的请求传递给服务器端应用程序&#xff0c;服务器端应用程序会处理这些请求&#xff…...

Sentinel配置的blockHandler方法不生效

①首先配置流控的资源名跟SentinelResource中的Value配置的一定要一直且唯一 ②其次blockhandler后面的方法一定要跟下面指定的方法名称是一样的 ③也就是我犯下的错误&#xff0c;一定要注意是上面那个才是Sentinel的&#xff0c;下面的是sun公司的…我说呢&#xff0c;一直…...

Mybatis的三种映射关系以及联表查询

目录 一、概念 二、一对一 1、配置generatorConfig.xml 2、Vo包的编写 3、xml的sql编写 4、编写对应接口及实现类 5、测试 三、一对多 1、Vo包类的编写 2、xml的sql编写 3、编写对应接口及实现类 4、测试 四、多对多 1、Vo类 2、xml的sql配置 3、接口及接口实现…...

基于串口校时的数字钟设计

文章目录 设计目标硬件设计数码管串口 软件设计顶层模块串口接收模块数据处理模块时钟模块串口发送模块 总结 设计目标 环境&#xff1a;ACX720开发板 实现功能&#xff1a; 数码管能够显示时分秒能够接收串口数据修改时间能够将当前时间以1s一次速率发送到电脑 硬件设计 数…...

支持向量机(二)

文章目录 前言具体内容 前言 总算要对稍微有点难度的地方动手了&#xff0c;前面介绍的线性可分或者线性不可分的情况&#xff0c;都是使用平面作为分割面的&#xff0c;现在我们采用另一种分割面的设计方法&#xff0c;也就是核方法。 核方法涉及的分割面不再是 w x b 0 wx…...

Arrays.asList 和 null 类型

一、Arrays.asList 类型简析 Arrays.asList() 返回的List 是它的内部类&#xff0c;不能使用 retainAll() 取交集&#xff0c;导致元素的删除&#xff0c;会报错。 List<String> list Arrays.asList(value.split(",")); 替换为> List<String> list…...

《论文阅读》用提示和释义模拟对话情绪识别的思维过程 IJCAI 2023

《论文阅读》用提示和复述模拟对话情绪识别的思维过程 IJCAI 2023 前言简介相关知识prompt engineeringparaphrasing模型架构第一阶段第二阶段History-oriented promptExperience-oriented Prompt ConstructionLabel Paraphrasing损失函数前言 你是否也对于理解论文存在困惑?…...

【AI】机器学习——绪论

文章目录 1.1 机器学习概念1.1.1 定义统计机器学习与数据挖掘区别机器学习前提 1.1.2 术语1.1.3 特点以数据为研究对象目标方法——基于数据构建模型SML三要素SML步骤 1.2 分类1.2.1 参数化/非参数化方法1.2.2 按算法分类1.2.3 按模型分类概率模型非概率模型逻辑斯蒂回归 1.2.4…...

linux 查看端口占用

查看端口占用 使用lsof 可以使用lsof -i:端口号 来查看端口占用情况 lsof -i:8010COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAMEnginx 35653 zhanghe 10u IPv4 0xcac2e413ddf9c5b9 0t0 TCP *:8010 (LISTEN)nginx 35654 zhanghe 10u…...

modernC++手撸任意层神经网络22前向传播反向传播梯度下降等23代码补全的例子0901b

以下神经网络代码,请添加输入:{{1,0},{1,1}},输出{1,0};添加反向传播,梯度下降等训练! 以下神经网络代码,请添加输入:{{1,0},{1,1}},输出{1,0};添加反向传播,梯度下降等训练! #include <iostream> #include<vector> #include<Eigen/Dense> #include<rando…...

tkinter控件样式

文章目录 以按钮为例共有参数动态属性 tkinter系列&#xff1a; GUI初步&#x1f48e;布局&#x1f48e;绑定变量&#x1f48e;绑定事件&#x1f48e;消息框&#x1f48e;文件对话框&#x1f48e;控件样式扫雷小游戏&#x1f48e;强行表白神器 以按钮为例 tkinter对控件的诸…...

【linux命令讲解大全】042. 深入了解 which 命令:查找和显示命令的绝对路径

文章目录 which补充说明语法选项参数实例 从零学 python which 查找并显示给定命令的绝对路径 补充说明 which 命令用于查找并显示给定命令的绝对路径&#xff0c;环境变量 PATH 中保存了查找命令时需要遍历的目录。which 指令会在环境变量 $PATH 设置的目录里查找符合条件的…...

实战项目 在线学院之集成springsecurity的配置以及执行流程

一 后端操作配置 1.0 工程结构 1.1 在common下创建spring_security模块 1.2 pom文件中依赖的注入 1.3 在service_acl模块服务中引入spring-security权限认证模块 1.3.1 service_acl引入spring-security 1.3.2 在service_acl编写查询数据库信息 定义userDetailServiceImpl 查…...

【ARM CoreLink CCI-400 控制器简介】

文章目录 CCI-400 介绍 CCI-400 介绍 CCI&#xff08;Cache Coherent Interconnect&#xff09;是ARM 中 的Cache一致性控制器。 CCI-400 将 Interconnect 和coherency 功能结合到一个模块中。它支持多达两个ACE master 点的interface&#xff0c;例如&#xff1a; Cortex-A…...

Linux xargs命令继续学习

之前学习过Linux xargs&#xff0c;对此非常的不熟悉&#xff0c;下面继续学习一下&#xff1b; xargs 可以将管道或标准输入&#xff08;stdin&#xff09;数据转换成命令行参数&#xff0c;也能够从文件的输出中读取数据&#xff1b; xargs也可以给命令传递参数&#xff1b;…...

【广州华锐互动】数字孪生智慧楼宇3D可视化系统:掌握实时运行状态,优化运营管理

在过去的几年中&#xff0c;科技的发展极大地改变了我们的生活和工作方式。其中&#xff0c;三维数据可视化技术的出现&#xff0c;为我们提供了全新的理解和观察世界的方式。特别是在建筑行业&#xff0c;数字孪生智慧楼宇3D可视化系统的出现&#xff0c;让我们有机会重新定义…...

20230904工作心得:集合应该如何优雅判空?

1 集合判空 List<String> newlist null;//空指针if( !newlist.isEmpty()){newlist.forEach(System.out::println);}//空指针if(newlist.size()>0 && newlist!null){newlist.forEach(System.out::println);}//可行if(newlist!null && newlist.size()&…...

使用Python进行健身手表数据分析

健身手表(Fitness Watch)数据分析涉及分析健身可穿戴设备或智能手表收集的数据&#xff0c;以深入了解用户的健康和活动模式。这些设备可以跟踪所走的步数、消耗的能量、步行速度等指标。本文将带您完成使用Python进行Fitness Watch数据分析的任务。 Fitness Watch数据分析是健…...

什么是malloxx勒索病毒,服务器中malloxx勒索病毒了怎么办?

Malloxx勒索病毒是一种新型的电脑病毒&#xff0c;它通过加密用户电脑中的重要文件数据来威胁用户&#xff0c;并以此勒索钱财。这种病毒并不是让用户的电脑瘫痪&#xff0c;而是以非常独特的方式进行攻击。在感染了Malloxx勒索病毒后&#xff0c;它会加密用户服务器中的数据&a…...

苏州全网网站建设/长春网站建设公司哪家好

前几天我叔公催我学车买车 今年我妈也跟我念叨了很多次&#xff0c;叫我去学车 说没有一台车说不过去&#xff0c;去见什么人也不方便。 我爸则说有房没有一台豪车都还不算成功&#xff0c;你怎么也得买一台宝马。 之前维哥也跟我说过一台豪车是我们一个重要的标签&#xff0c…...

网站写手怎么做/电脑培训班有哪些科目

很多平台都有点赞功能,今天提供的这个思路可用于很多平台,希望可以掌握该技巧,实现你自己的点赞器。本案例目标为虎嗅 24 小时频道点赞。 爬虫小课系列文章导读链接 第一篇:Python 爬虫小课 1-9 宝妈程序媛福利-育儿网问答数据抓取 第二篇:Python 爬虫小课 2-9 中国妖怪…...

建设银行官方网站打不开/googleseo优化

参考&#xff1a;https://blog.csdn.net/maweifei/article/details/51221259 # 示例&#xff1a; img_ cv::Mat::zeros(pic_height_, pic_width_, CV_8UC1);Mat不但是一个非常有用的图像容器类&#xff0c;同时也是一个通用的矩阵类。 Mat矩阵(图像容器)创建时CV_8UC1、CV_8U…...

如何自己建立网站/公司如何在百度宣传

Dubbo自定义Filter统一处理异常参考文章&#xff1a; &#xff08;1&#xff09;Dubbo自定义Filter统一处理异常 &#xff08;2&#xff09;https://www.cnblogs.com/gossip/p/11734654.html 备忘一下。...

大德通众包 做网站怎么样/app推广赚佣金

MySQL性能优化--优化数据库结构之优化数据大小 By&#xff1a;授客 QQ&#xff1a;1033553122 尽量减少表占用的磁盘空间。通常&#xff0c;执行查询期间处理表数据时&#xff0c;小表占用更少的内存。 表列 l 尽可能使用最效率(最小)的数据类型。比如&#xff0c;使用更小…...

网站建设方案及预算/搜狗关键词排名此会zjkwlgs

前言 记录一下Linux CentOS 7安装Tomcat7的完整步骤。 下载 首先需要下载tomcat7的安装文件&#xff0c;地址如下&#xff1a; http://mirror.bit.edu.cn/apache/tomcat/tomcat-7/v7.0.69/bin/apache-tomcat-7.0.69.tar.gz 安装与配置 安装之前需要确保已经安装JDK&#xff0c;…...