SQL/日志监控框架log4jdbc

news2024/9/28 5:31:55

系列文章目录


文章目录

  • 系列文章目录
  • 前言


前言

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。
在这里插入图片描述


log4jdbc is a Java JDBC driver that can log SQL and/or JDBC calls (and optionally SQL timing information) for other JDBC drivers using the Simple Logging Facade For Java (SLF4J) logging system.
在这里插入图片描述
新入手一个项目,想要了解其业务逻辑,看其SQL是必不可少的,但是为了更明了的学习,我们往往需要把SQL拿出来,调试和验证。

在SpringBoot集成MyBatis中,如果想要打印SQL,很简单:

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

但是这里打印的SQL,你传递的参数是以?来代替的,因为MyBatis使用的是占位符,不是拼接SQL,那么如何把具体执行的SQL打印出来?

有人说用P6Spy,但实际上这个框架和MyBatis自己打印SQL功能是一样的,不能满足上诉需求。

又看到一个log4jdbc,使用后可以满足要求。当然不止这个框架打印执行SQL这种东西,是不能上生产的,这里只是为了本地使用。

首先引入

<!--监控sql日志-->
<dependency>
    <groupId>org.bgee.log4jdbc-log4j2</groupId>
    <artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
    <version>1.16</version>
</dependency>

新增 log4jdbc.log4j2.properties 配置文件:

# If you use SLF4J. First, you need to tell log4jdbc-log4j2 that you want to use the SLF4J logger
log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator

配置详细介绍

log4jdbc.spylogdelegator.name spy日志处理类,默认为 net.sf.log4jdbc.log4j2.Log4j2SpyLogDelegator

log4jdbc.debug.stack.prefix 项目应用程序的包的部分或全部的前缀

log4jdbc.sqltiming.warn.threshold 执行SQL的时间长度(毫秒),在该时间段内,SQL需要至少运行这么长时间才能生成警告消息

log4jdbc.sqltiming.error.threshold 执行SQL的时间长度(毫秒),在该时间段内,SQL需要至少运行这么长时间才能生成错误消息

log4jdbc.dump.booleanastruefalse boolean 值显示为 0 和 1 ,为 true 时 boolean 值显示为 true 和 false,默认false

log4jdbc.dump.sql.maxlinelength SQL显示的最大长度,默认90

log4jdbc.dump.fulldebugstacktrace 在调试模式下是否转储完整堆栈跟踪,默认false

log4jdbc.statement.warn 使用statement(不是PreparedStatement)时,在日志中是否与SQL一起显示警告,默认false

log4jdbc.dump.sql.select select语句是否输出,默认true

log4jdbc.dump.sql.insert insert语句是否输出,默认true

log4jdbc.dump.sql.update update语句是否输出,默认true

log4jdbc.dump.sql.delete delete语句是否输出,默认true

log4jdbc.dump.sql.create create语句是否输出,默认true

log4jdbc.dump.sql.addsemicolon 是否在 SQL 的行末添加一个分号,默认false

log4jdbc.auto.load.popular.drivers 是否自动选择最佳jdbc驱动,默认true

log4jdbc.drivers jdbc驱动,String类型

log4jdbc.trim.sql 默认true

log4jdbc.trim.sql.extrablanklines 默认true

log4jdbc.suppress.generated.keys.exception 默认false

在application.yml文件里修改数据库相关配置,替换Driver和URL

# 数据源配置
spring:
    datasource:
        type: com.alibaba.druid.pool.DruidDataSource
        # driverClassName: com.mysql.jdbc.Driver
        driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
        druid:
            master:
        # url: jdbc:mysql://106.14.119.120:3306/test
                url: jdbc:log4jdbc:mysql://106.14.119.120:3306/test

配置log4jdbc的日志打印,不配置的话,日志量特别大

log4jdbc 中使用了以下 7 种logger,可以进行相应的配置来实现需求

logger 描述

jdbc.sqlonly 仅仅记录 SQL 语句,会将占位符?替换为实际的参数

jdbc.sqltiming 记录 SQL 语句实际的执行时间

jdbc.audit 除了 ResultSet 之外的所有JDBC调用信息,篇幅较长

jdbc.resultset 包含 ResultSet 的信息,输出篇幅较长

jdbc.connection 输出了 Connection 的 open、close 等信息

log4jdbc.debug 内部调试使用,输出 log4jdbc spy 加载驱动时的信息

jdbc.resultsettable 显示前滚结果集的记录器

这里我们只看SQL即可,可以根据你使用的框架,增加类似配置

<!--监控sql日志输出 -->
<!--      仅仅记录 SQL 语句,会将占位符替换为实际的参数-->
<logger name="jdbc.sqlonly" level="INFO" additivity="false">
    <appender-ref ref="Console" />
</logger>
<!--  包含 ResultSet 的信息,输出篇幅较长  -->
<logger name="jdbc.resultset" level="ERROR" additivity="false">
    <appender-ref ref="Console" />
</logger>
<!--  如想看到表格数据,将OFF改为INFO  -->
<logger name="jdbc.resultsettable" level="OFF" additivity="false">
    <appender-ref ref="Console" />
</logger>
<!-- 输出了 Connection 的 open、close 等信息  -->
<logger name="jdbc.connection" level="OFF" additivity="false">
    <appender-ref ref="Console" />
</logger>
<!--    包含 SQL 语句实际的执行时间 及sql语句(与jdbc.sqlonly功能重复)   -->
<logger name="jdbc.sqltiming" level="OFF" additivity="false">
    <appender-ref ref="Console" />
</logger>
<!--    除了 ResultSet 之外的所有JDBC调用信息,篇幅较长 -->
<logger name="jdbc.audit" level="OFF" additivity="false">
    <appender-ref ref="Console" />
</logger>

运行程序,即可看到我们想要的SQL信息

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux Centos7安装Docker容器

Docker的简介 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器或Windows 机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 一个完整的Docker有以下几个部分…

百万组通用编码器 L1527芯片产品介绍,重码率很低

L1527 是 CMOS 结构的预烧内码&#xff08;遥控中的地址码&#xff09;通用编码器&#xff0c;内有 20 位可预烧写 100 万组内码组合&#xff0c;使得重码率很低&#xff0c;具有更高安全性。芯片内集成误操作禁止功能&#xff0c;在按键输入有效且状态不变时&#xff0c;芯片连…

【C语言】 gets()puts()fgets()fputs()字符串输入输出函数的用法

文章目录 C语言中的字符串输入输出函数&#xff1a;gets、puts、fgets与fputsgets函数puts函数fgets函数fputs函数 C语言中的字符串输入输出函数知识点总结结语 C语言中的字符串输入输出函数&#xff1a;gets、puts、fgets与fputs 在C语言中&#xff0c;处理字符串的输入和输出…

Git,GitHub,Gitee,GitLab 四者有什么区别?

目录 1. Git 2. GitHub 3. Gitee 4. GitLab 5. 总结概括 1. Git Git 是一个版本管理工具&#xff0c;常应用于本地代码的管理&#xff0c;下载完毕之后&#xff0c;我们可以使用此工具对本地的资料&#xff0c;代码进行版本管理。 下载链接&#xff1a; Git - Downlo…

企业如何申请邓白氏编码(DUNS)呢?

尤其是食品企业&#xff0c;药品企业在申请美国FDA认证的时候&#xff0c;经常会听到一个名词——“邓白氏编码”&#xff0c;申请邓白氏编码是企业顺利完成FDA注册认证的必要前提&#xff0c;因此都需要提供邓白氏编码。 今天&#xff0c;小编就来为大家详细介绍下邓白氏编码…

Redis命令-String命令

4.3 Redis命令-String命令 String类型&#xff0c;也就是字符串类型&#xff0c;是Redis中最简单的存储类型。 其value是字符串&#xff0c;不过根据字符串的格式不同&#xff0c;又可以分为3类&#xff1a; string&#xff1a;普通字符串int&#xff1a;整数类型&#xff0…

8868体育助力西甲巴塞罗那 运作球员转会

西甲联赛的巴塞罗那俱乐部是8868体育的合作球队之一&#xff0c;近日有消息称&#xff0c;巴萨将出售埃里克-加西亚&#xff0c;球员身价估值1500万欧元。目前巴萨正在明确中卫位置的战略&#xff0c;已经确定要回购在贝蒂斯表现出色的里亚德&#xff0c;巴萨的想法是将埃里克-…

C语言----简单文件处理

当大家学习过动态内存开辟后&#xff0c;那么我们就已经可以把内存的每一个地方使用了。但是大家有没有想过&#xff0c;我们现在是在自己电脑上打代码。以后工作了&#xff0c;自己写代码在自己电脑上&#xff0c;老板要是想要一份代码看看&#xff0c;或者你成为大能了&#…

Vue3气泡卡片(Popover)

效果如下图&#xff1a;在线预览 APIs 参数说明类型默认值必传title卡片标题string | slot‘’falsecontent卡片内容string | slot‘’falsemaxWidth卡片内容最大宽度string | number‘auto’falsetrigger卡片触发方式‘hover’ | ‘click’‘hover’falseoverlayStyle卡片样式…

cesium加载.tif格式文件

最近项目中有需要直接加载三方给的后缀名tif格式的文件 <script src"https://cdn.jsdelivr.net/npm/geotiff"></script> 或者 yarn add geotiff npm install geotiff 新建tifs.js import GeoTIFF, { fromBlob, fromUrl, fromArrayBuffer } from geotif…

智慧公厕四大核心能力,赋能城市公共厕所智能化升级

公共厕所是城市基础设施中不可或缺的一部分&#xff0c;但由于传统的公共厕所在建设与规划上&#xff0c;存在一定的局限性&#xff0c;导致环境卫生差、管理难度大、使用体验不佳等问题&#xff0c;给市民带来了很多不便。而智慧公厕作为城市智能化建设的重要组成部分&#xf…

【直播课】2024年PostgreSQL CM认证实战培训课程于4月27日开课!

课程介绍 了解关注开源技术&#xff0c;学习PG以点带面 Linux/Andriod&#xff08;操作系统&#xff09;、Apache/Tomcat&#xff08;应用服务器&#xff09;、OpenStack/KVM&#xff08;虚拟化&#xff09;、Docker/K8S&#xff08;容器化&#xff09;、Hadoop&#xff08;大…

全志R128 SDK HAL 模块开发指南——GPIO

GPIO 模块介绍 整个 GPIO 控制器由数字部分&#xff08;GPIO 和外设接口&#xff09;以及 IO 模拟部分&#xff08;输出缓冲&#xff0c;双下拉&#xff0c;引脚Pad&#xff09;组成。其中数字部分的输出可以通过 MUX 开关选择&#xff0c;模拟部分可以用来配置上下拉&#x…

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单闪烁效果

Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单闪烁效果 目录 Python 基于 OpenCV 视觉图像处理实战 之 OpenCV 简单实战案例 之七 简单闪烁效果 一、简单介绍 二、简单闪烁效果实现原理 三、简单闪烁效果案例实现简单步骤 四、注意事项 一、简单…

C++超市商品管理系统

一、简要介绍 1.本项目为面向对象程序设计的大作业&#xff0c;基于Qt creator进行开发&#xff0c;Qt框架版本6.4.1&#xff0c;编译环境MINGW 11.2.0。 2.项目结构简介&#xff1a;关于系统逻辑部分的代码的头文件在head文件夹中&#xff0c;源文件在s文件夹中。与图形界面…

MySQL学习笔记------SQL(1)

关系型数据库&#xff08;RDBMS&#xff09; 建立在关系模型基础上&#xff0c;由多张相互连接的二维表组成的数据库 特点&#xff1a;使用表储存数据&#xff0c;格式统一&#xff0c;便于维护 使用SQL语言操作&#xff0c;标准统一&#xff0c;使用方便 SQL通用语法 SQL…

实力先锋!百望云入选“中国ToB行业影响力价值榜”

3月22日&#xff0c;2024「ToB头条行业大会」在北京大学中关新园举行。百望云实力入选“ToB行业年度榜单”&#xff0c;荣获“实力先锋企业”称号&#xff01;与百望云共同入围的企业还包括美团、腾讯云、网易云、WPS365、携程商旅等行业头部企业。 本次大会以“韧性生长、共话…

vue3+ts+element home页面侧边栏+头部组件+路由组件组合页面教程

文章目录 效果展示template代码script代码样式代码 效果展示 template代码 <template><el-container class"home"><el-aside class"flex" :style"{ width: asideDisplay ? 70px : 290px }"><div class"aside-left&q…

白酒:浓香型白酒的典型代表与特点

云仓酒庄的豪迈白酒作为白酒的品牌&#xff0c;具有一系列与众不同的特点和优势。下面云仓酒庄的豪迈白酒将从典型性、品质、口感和包装等方面深入分析白酒的特点&#xff0c;以及它如何体现浓香型白酒的魅力。 浓香型白酒是中国白酒的重要分支&#xff0c;以浓郁的香味和与众不…

Redis - 5k star! 一款简洁美观的 Redis 客户端工具~

项目简介 Tiny RDM 是一款现代化、轻量级的跨平台 Redis 桌面客户端&#xff0c;可在 Mac、Windows 和 Linux 系统上运行。初次打开 Tiny RDM&#xff0c;你会被它舒适的风格和配色所吸引&#xff0c;界面简约而不简单&#xff0c;功能齐全。 Tiny RDM 有着如下的功能特性 项…