SQL/日志监控框架log4jdbc

系列文章目录


文章目录

  • 系列文章目录
  • 前言


前言

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


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信息

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

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

相关文章

【61-80】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【61-80】计算机网络基础知识&#xff08;非常详细&#xff09;从零基础入门到精通&#xff0c;看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用61、 四次挥手相关内容62、挥手为什么需要四次&#xff1f;63、2MSL等待状态&#xff1f;64、四次…

【Redis主从架构。主从工作原理psync、bgsave、部分数据复制、主从复制风暴解决方案】【Redis哨兵高可用架构。sentinel】

Redis主从架构 Redis主从工作原理数据部分复制 Redis哨兵高可用架构client连接哨兵规则主节点挂了&#xff0c;集群从新选择主节点&#xff0c;并且同步给sentinel 转自图灵课堂 redis主从架构搭建&#xff0c;配置从节点步骤&#xff1a; 1、复制一份redis.conf文件2、将相关…

《Linux运维实战:达梦DM8数据库之开启本地归档》

一、归档概述 在达梦数据库归档模式下&#xff0c;数据库同时将重做日志写入联机日志文件和归档日志文件中分别进行存储。采用归档模式会对系统的性能产生影响&#xff0c;然而&#xff0c;当系统一旦出现介质故障&#xff0c;如磁盘损坏时&#xff0c;利用归档日志&#xff0c…

【nodejs ubuntu】nodejs版本过老的更新方法

使用apt方法安装的node.js版本过于老了&#xff0c;以至于我没法用npm下载hexo 下面是更新方法 参考了这篇文章 然后就可以成功安装了

TXT文本内容高效处理,支持删除文件前后行多余内容,轻松管理文本内容

在信息爆炸的时代&#xff0c;文本文件是我们日常生活和工作中不可或缺的一部分。然而&#xff0c;处理大量的TXT文本内容常常让人头疼不已。为了帮助您更高效地处理TXT文本内容&#xff0c;我们特别推出了一款强大的文本处理工具&#xff0c;支持删除文件前后行多余内容&#…

实现能效升级 | 基于ACM32 MCU的冰箱压缩机变频方案

概述 冰箱制冷系统中最重要的部件是压缩机。它从吸气管吸入低温低压的制冷剂气体&#xff0c;通过电机运转带动活塞对其进行压缩后&#xff0c;向排气管排出高温高压的制冷剂气体&#xff0c;为整个制冷循环提供源动力。这样就实现了压缩→冷凝→膨胀→蒸发 ( 吸热 ) 的制冷循环…

专业文件翻译,笔译翻译公司推荐!

在全球化的大潮中&#xff0c;文件翻译已然成为了商业、法律、科技、文化等诸多领域的核心纽带。特别是在商业交往、合同签订、技术交流等方面&#xff0c;一份高质量的译文往往关乎着合作的成败。而在这其中&#xff0c;专业的文件翻译公司更是扮演着至关重要的角色。它们不仅…

基于C++的GridMap2D 代码和公式

膨胀半径 这段代码主要是关于在二维地图上计算点之间距离的几个函数&#xff0c;同时也包含了查询地图上特定坐标点的距离和值的函数。我们逐一来解释每个函数的作用&#xff1a; worldDist(unsigned x1, unsigned y1, unsigned x2, unsigned y2): 这个函数计算两个地图坐标之…

navicat连接本地虚拟机centos7下mysql

1 环境准备 1.1 VM16和centos7 VMware历史版本下载 VMware最新版下载 这里下载需要注册账号&#xff0c;验证码输入不了的话在右上角把语言改为英语就好 centos7下载教学 激活码百度即可&#xff0c;或者这个 VM16安装centos7教学 1.2 mysql 直接安装mariadb MariaDB数据库…

JAVA- SPRINGBOOT+VUE 大文件断点续传

版本&#xff1a;6.5.40 代码&#xff1a;up6-jsp-springboot: Web大文件上传-jsp-springboot示例 - Gitee.com nosql示例 nosql示例不需要进行任何配置&#xff0c;可以直接访问测试。 SQL示例 1.创建数据库 2.配置数据库连接 3.自动下载maven依赖 4.启动项目 启动成功 6.访…

代码随想录算法训练营Day57 ||leetCode 583. 两个字符串的删除操作 || 72. 编辑距离

647. 回文子串 dp[i][j]表示第i位开始&#xff0c;第j位结束的字符串是否为回文串 class Solution { public:int countSubstrings(string s) {vector<vector<bool>> dp(s.size(), vector<bool>(s.size(), false));int result 0;for (int i s.size() - 1…

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

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

Workman(php)实时推送示例(thinkphp)与问题排查

workman workerman是一款开源高性能PHP应用容器&#xff0c;它大大突破了传统PHP应用范围&#xff0c;被广泛的用于互联网、即时通讯、APP开发、硬件通讯、智能家居、物联网等领域的开发。 业务场景 目前接触到的场景大致分为两类&#xff1a; 物联网方面&#xff1b;设备传…

聊聊多模态大模型处理的思考

多模态&#xff1a;文本、音频、视频、图像等多形态的展现形式。目前部门内业务要求领域大模型需要是多模态——支持音频/文本。从个人思考的角度来审视下&#xff0c;审视下多模态大模型的实现方式。首先就要区分输入与输出&#xff0c;即输入的模态与输出的模态。从目前来看&…

为什么微软、谷歌没做成,第一个干这件事反而是亚马逊?

相信大家都熟悉云服务、云存储等应用&#xff0c;但是你知道是哪家公司最先提出这个概念的吗&#xff1f; 是的&#xff0c;微软、苹果还是英特尔&#xff1f; 事实上&#xff0c;事实并非如此。 亚马逊是全球第一个推出云服务的公司。 Web于2006年首次推出&#xff0c;即如今…

Mudbox 2025新版中文---数字雕刻与纹理绘画新境界

Mudbox 2025是一款功能强大的3D建模软件&#xff0c;以其卓越的建模能力和高效的创作工具而备受瞩目。它支持纹理烘烤、三维层、多分辨率网格编辑等功能&#xff0c;为用户提供了直观且易于操作的用户界面。 Mudbox 2025新版中文下载 功能特色&#xff1a; 强大的建模与雕刻能…

SpringBoot中的异步多线程使用及避坑指南

处理请求时需要考虑到系统的性能和响应速度。特别是在处理大量请求或者需要进行耗时操作时&#xff0c;采用异步多线程处理是一种常见的解决方案。Spring Boot提供了Async注解来支持异步方法调用&#xff0c;结合合适的线程池配置&#xff0c;可以很容易地实现异步多线程处理&a…

在 fstab文件中配置 UUID方式自动挂载数据盘、swap、目录(**)

linux如何挂在硬盘&#xff0c;自动挂载和手动挂载&#xff08;详细说明&#xff09;https://gitcode.csdn.net/65eedcea1a836825ed7a06f4.html 解决linux重启后磁盘挂载失效的问题 https://blog.csdn.net/sugarbliss/article/details/107033034 linux /etc/fstab 文件详细说…

非wpf应用程序项目【类库、用户控件库】中使用HandyControl

文章速览 前言实现方法1、首先需要在NuGet包管理器中添加HandyControl包&#xff1b;2、在Properties目录下添加DesignTimeResources&#xff1b;3、将其中内容替换为官网中于App.xaml添加的内容 参考文章 坚持记录实属不易&#xff0c;希望友善多金的码友能够随手点一个赞。 共…

windows 下用使用api OCI_ConnectionCreate连接oracle报错 TNS:无法解析指定的连接标识符

背景&#xff0c;两台服务器系统一样&#xff0c;oracle版本一样&#xff0c;其中一台服务器在运行程序的时候报错 TNS:无法解析指定的连接标识符 但是PL/SQL可以正常连接&#xff0c;怀疑是oracle配置文件的原因 tnsnames.ora配置文件大概作用&#xff1a;是Oracle客户端的网…