从零开始 Spring Boot 59:Hibernate 日志

从零开始 Spring Boot 59:Hibernate 日志

spring boot

图源:简书 (jianshu.com)

Hibernate 支持多种日志模块,本文介绍如何在 Spring Boot 中使用 Log4j2记录 Hibernate 日志。

实际上本文是我在写上篇文章时遇到的各种坑和最终解决的记录。

首先需要添加 Log4j2 的依赖,并排除 Spring Boot 默认使用的 logging common 日志模块:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>

resources目录下添加 Log4j2 的配置文件log4j2-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<Configuration status="WARN" monitorInterval="30"><Properties><Property name="LOG_PATTERN">%d{yyyy-MM-dd HH:mm:ss.SSS} %5p ${hostName} --- [%15.15t] %-40.40c{1.} : %m%n%ex</Property></Properties><Appenders><Console name="ConsoleAppender" target="SYSTEM_OUT" follow="true"><PatternLayout pattern="${LOG_PATTERN}"/></Console></Appenders><Loggers><Logger name="com.example.manytomany" level="debug" additivity="false"><AppenderRef ref="ConsoleAppender" /></Logger><Logger name="org.hibernate.SQL" level="debug" additivity="false"><AppenderRef ref="ConsoleAppender"/></Logger><Logger name="org.hibernate.orm.jdbc.bind" level="trace" additivity="false"><AppenderRef ref="ConsoleAppender"/></Logger><Logger name="org.hibernate.stat" level="trace" additivity="false"><AppenderRef ref="ConsoleAppender"/></Logger><Logger name="org.hibernate.SQL_SLOW" level="trace" additivity="false"><AppenderRef ref="ConsoleAppender"/></Logger><Logger name="org.hibernate.cache" level="trace" additivity="false"><AppenderRef ref="ConsoleAppender"/></Logger><Root level="info"><AppenderRef ref="ConsoleAppender" /></Root></Loggers>
</Configuration>
  • 不需要在配置文件(application.properties)中显式指定配置,比如logging.config=xxx。Spring Boot 可以自动检测并读取 Log4j2 的配置文件。
  • Log4j2 配置文件可以命名为log4j2.xmllog4j2-spring.xml,但因为 Spring 的加载机制的原因,前者不会被正常加载,所以最好使用后者进行命名。

XML 中有两个节点比较重要:

  • Appenders,定义日志输出的目标(Appender),可以是控制台或者文件,示例中只设置了控制台。
  • Loggers,可以定义多个Logger,每个Logger可以控制某个包下的日志输出级别,以及输出到哪些地方(AppenderRef)。对于没有特定Logger的包,会使用Root的设置输出日志。

示例中输出 Hibernate 日志的 Logger 设置适用于 Hibernate 6 以上版本。

现在这种设置可以可以让 Hibernate 日志输出到控制台。不过如果你使用 Spring Boot 的测试用例,并需要查看 Hibernate 日志,还需要注意,此时只能使用@SpringBootTest标注的测试套件。如果使用@SpringJunitConfig标注的测试套件就不会输出 Hibernate 日志,因为这种情况下不能正常加载相应的日志模块。

比如:

@SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection")
@SpringBootTest
@Import(ExampleDataConfig.class)
@Transactional
public class StudentTests {// ...
}

关于 Spring Boot 的测试框架的相关说明,可以阅读我的这篇文章。

现在输出的 Hibernate 日志中就包含 SQL 和相应参数的绑定信息:

... DEBUG ... : insert into student_course2 (rate,course_id,student_id) values (?,?,?)
... TRACE ... : binding parameter [1] as [INTEGER] - [88]
... TRACE ... : binding parameter [2] as [BIGINT] - [111]
... TRACE ... : binding parameter [3] as [BIGINT] - [82]

The End,谢谢阅读。

本文的完整示例代码可以从这里获取。

参考资料

  • How to use Log4j 2 with Spring Boot | CalliCoder
  • Log4j – Articles and Tutorials
  • SpringBoot整合log4j2进行日志配置及防坑指南 - 星空流年 - 博客园 (cnblogs.com)
  • Hibernate 4, 5 & 6的日志指南 - 在开发和生产中使用正确的配置 - 掘金 (juejin.cn)

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【HTTP 协议1】图文详解 HTTP 请求和应答报文

文章目录 前言一、认识 HTTP 协议1, 什么是 HTTP 协议2, HTTP 协议的报文格式 二、HTTP 请求报文1, 认识方法1.1, GET 和 POST 辨析(重点)1.2, 其他方法 2, 认识 URL3, 认识 Header3.1, Host3.2, Content-Length3.3 Content-Type3.4, User-Agent3.5, Referer3.6, Cookie(重点) …

力扣单调栈专题 739. 每日温度 496.下一个更大元素I 503.下一个更大元素II 42. 接雨水 84.柱状图中最大的矩形 步骤及C++实现 总结

文章目录 739. 每日温度496.下一个更大元素 I503.下一个更大元素II方法一 数组拼接方法二 模拟遍历两边nums 42. 接雨水双指针 暴力法双指针优化单调栈 84.柱状图中最大的矩形暴力解法双指针解法单调栈 总结 739. 每日温度 暴力解法&#xff0c;双层for循环&#xff0c;时间复杂…

如何在 MATLAB 中进行图像分割(matlab仿真与图像处理系列第7期)

在 MATLAB 中进行图像分割有多种方法,下面介绍一些常用的方法: 基于阈值的二值化分割这是一种最简单的分割方法,将图像分为两个部分:背景和前景。其主要思想是,选择一个阈值,将图像中的像素值与阈值进行比较,将像素值大于阈值的像素标记为前景(白色),将像素值小于阈值…

17. 订单金额趋势分析

文章目录 题目需求思路一实现一实现二&#xff1a;使用 over(range)学习链接题目来源 题目需求 查询截止每天的最近3天内的订单金额总和以及订单金额日平均值&#xff0c;保留两位小数&#xff0c;四舍五入。 最近三天 的业务逻辑通常是基于当天往前推2天 期望结果如下&#x…

归并排序的具体实现过程

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《算法详解》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心…

【JavaEE初阶】CSS

摄影分享~ 文章目录 一.CSS基本规范1. CSS基本语法规范2.CSS选择器 二.CSS常用属性1. 字体属性2.文本属性3.背景属性4.圆角矩形5.元素的显示模式块级元素行内元素 6.盒子模型边框内边距外边距 7.弹性布局 一.CSS基本规范 层叠样式表。(Cascading Style Sheets) CSS 能够对网页…

【深度学习】AIGC ,ControlNet 论文,原理,训练,部署,实战,教程

论文&#xff1a;https://arxiv.53yu.com/pdf/2302.05543 代码&#xff1a;https://github.com/lllyasviel/ControlNet 得分几个博客完成这个事情的记录了&#xff0c;此篇是第一篇&#xff0c;摘录了一些论文内容。ControlNet 的原理极为朴实无华&#xff08;对每个block添加…

BPMNJS 在HTML中的引入与使用

BPMNJS 在HTML中的引入与使用 在网上看到的大多是基于vue使用BPMN的示例或者教程&#xff0c;竟然没有在HTML使用的示例&#xff0c;有也是很简单的介绍核心库的引入和使用&#xff0c;并没有涉及到扩展库。于是简单看了下&#xff0c;真的是一波三折&#xff0c;坎坎坷坷。不过…

【UE5 Cesium】08-Cesium for Unreal 子关卡应用实例(上)

UE版本&#xff1a;5.1 效果 &#xff08;运行游戏可以看到进入关卡体积内楼房模型才会显现&#xff0c;以此来减少电脑性能消耗&#xff09; 步骤 一、新建两个子关卡&#xff08;以北京和上海为例&#xff09; 点击窗口-》关卡-》新建 命名第一个子关卡为“SubLevel_Bei…

【数据库】使用DBever连接人大金仓数据库

下载安装DBever 首先需要下载并安装DBever&#xff0c;可以在DBever官网上下载最新版的安装程序&#xff0c;根据提示进行安装即可。 下载驱动程序 首先需要从人大金仓官方网站下载适用于DBever的驱动程序。下载完成后&#xff0c;将驱动程序保存到本地计算机上。 添加驱动…

7.4.2 【Linux】特殊设备 loop 挂载 (镜像文件不烧录就挂载使用)

挂载光盘/DVD镜像文件 如此一来我们不需要将这个文件烧录成为光盘或者是 DVD 就能够读取内部的数据了。 创建大文件以制作 loop 设备文件&#xff01; 创建大型文件 假设我要创建一个空的文件在 /srv/loopdev &#xff0c;那可以这样做&#xff1a; 将 512 块&#xff0c;每…

【算法|动态规划系列No.5】leetcode62. 不同路径

个人主页&#xff1a;平行线也会相交 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 平行线也会相交 原创 收录于专栏【手撕算法系列专栏】【LeetCode】 &#x1f354;本专栏旨在提高自己算法能力的同时&#xff0c;记录一下自己的学习过程&#xff0c;希望…