从零开始 Spring Boot 59:Hibernate 日志

news2024/11/25 8:21:27

从零开始 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.coloradmin.cn/o/719012.html

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

相关文章

《黑马头条》 内容安全 feign 延迟任务精准发布

04自媒体文章-自动审核 1)自媒体文章自动审核流程 1 自媒体端发布文章后&#xff0c;开始审核文章 2 审核的主要是审核文章的 内容&#xff08;文本内容和图片&#xff09; 3 借助 第三方提供的接口审核文本 4 借助第三方提供的接口审核图片&#xff0c;由于图片存储到minIO中&…

C#核心知识回顾——8.ArryList、Stack栈、队列、哈希表

1.ArryList ArrayList array new ArrayList();//1.增array.Add(0);array.Add("1");array.Add(false);ArrayList arrayList new ArrayList();arrayList.Add(123);//范围增加(类似于拼接&#xff09;array.AddRange(arrayList);//插入(指定位置)array.Insert(1, &qu…

coxph-基准累积风险函数

右删失数据下的coxph拟合后&#xff0c;得到回归参数和基准累积风险函数&#xff0c;其中基准累积风险函数使用breslow估计得到&#xff1a; 代码&#xff0c;只是为了说明这个问题 res.cox <- survival::coxph(survival::Surv(time, status 2) ~ X1 X2,data auxData)bh…

LLM应用的技术栈与设计模式详解

大型语言模型是构建软件的强大新原语。 但由于它们是如此新&#xff0c;并且其行为与普通计算资源如此不同&#xff0c;因此如何使用它们并不总是显而易见的。 在这篇文章中&#xff0c;我们将分享新兴 LLM 应用程序的参考架构。 它展示了我们所见过的人工智能初创公司和先进科…

AOP简介

问题1&#xff1a;AOP的作用是什么&#xff1f; 问题2&#xff1a;连接点和切入点有什么区别&#xff0c;二者谁的范围大&#xff1f; 问题3&#xff1a;请描述什么是切面&#xff1f; 1.1 AOP简介和作用【理解】 AOP(Aspect Oriented Programming)面向切面编程&#xff0c;…

Vue3----吸顶导航

安装vueuse&#xff1a; npm i vueuse/core 1. 准备吸顶导航组 2.获取滚动距离 <script setup> // vueUse 中 useScroll import { useScroll } from vueuse/core const {y} useScroll(window) </script><template><div class"app-header-sticky&…

iostat命令和vmstat命令

1、iostat命令(磁盘) 1.1、介绍 iostat是I/O statistics&#xff08;输入/输出统计&#xff09;的缩写&#xff0c;iostat工具将对系统的磁盘操作活动进行监视。它的特点是汇报磁盘活动统计情况&#xff0c;同时也会汇报出 CPU使用情况。同vmstat一样&#xff0c;iostat也有一…

前端基础环境搭建

前端基础环境搭建 序nvm编辑器下载问题 PostMan接口测试工具 序 毕业了第一次写博客&#xff0c;因为入职啦。浅记录下今日工作内容。 刚入职必然是需要搭建好基础的环境。需了解并配置Node.js/NVM/NPM/Git/前端编辑器/Postman等等。 nvm nvm&#xff08;node.js version ma…

数据结构--树的定义与基本术语

数据结构–树的定义与基本术语 数的基本概念 树:从树根生长&#xff0c;逐级分支 非空树 \color{purple}非空树 非空树的特性: 有且仅有一个根节点 没有后继的结点称为“叶子结点”(或终端结点) 有后继的结点称为“分支结点”(或非终端结点) 除了根节点外&#xff0c;任何一个…

4.Squid代理服务器应用

文章目录 Squid代理服务器应用代理服务器代理的工作机制代理服务器的概念代理服务器的作用 Squid代理服务器作用Squid代理的类型 部署Squid安装Squidsystemctl创建squid系统运行构建传统代理服务器构建透明代理服务器Squid部署反向代理服务器 ACL访问控制Sarg图形化日志 Squid代…

11个每个Web开发人员都应该拥有的VS Code扩展

微信搜索 【大迁世界】, 我会第一时间和你分享前端行业趋势&#xff0c;学习途径等等。 本文 GitHub https://github.com/qq449245884/xiaozhi 已收录&#xff0c;有一线大厂面试完整考点、资料以及我的系列文章。 快来免费体验ChatGpt plus版本的&#xff0c;我们出的钱 体验地…

机器学习算法基础学习 # 集成学习之随机森林

随机森林(Random Forests) 是集成学习算法的一种。集成学习是通过组合多个学习器来完成学习任务。随机森林是结合多颗决策树来对样本进行训练和预测。随机森林通过随机扰动而令所有的树去相关。 随机森林可以使用巨量的预测器&#xff0c;甚至预测器的数量比观察样本的数量还多…

Matlab绘图系列教程-Matlab 34 种绘图函数示例(上)

Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化 文章目录 Matlab绘图系列教程&#xff1a;揭秘高质量科学图表的绘制与优化第一部分&#xff1a;入门指南1.1 简介关于本教程的目的与范围Matlab绘图在科学研究中的重要性 1.2 准备工作安装Matlab及其工具箱 1.3 …

干货 | 石化产品机器学习价格模型开发和SEI石化产品价格分析体系构建

以下内容整理自大数据能力提升项目必修课《大数据系统基础》同学们的期末答辩汇报。 我们的报告将分为六个部分&#xff0c;第一部分是研究背景与内容。受疫情影响以来&#xff0c;石化行业市场日趋饱和&#xff0c;竞争激烈&#xff0c;同时利润也受到压缩&#xff0c;大部分石…

谈个人信息保护

一、互联网生存指南&#xff1a;通过哪些方法来加强个人信息保护&#xff1f; 1.密码管理&#xff1a;选择安全可靠的密码&#xff0c;并避免使用容易猜测的密码。不要在不同的网站和应用程序使用相同的密码&#xff0c;以防止未经授权的访问。 2.双重身份验证&#xff1a;使…

AIMAX集群配置sdfstudio容器记录

AIMAX集群配置sdfstudio容器记录 一、登录二、测试三、通过Filezilla传输数据四、通过第三方私有镜像直接创建环境方式1 从dockerhub中下载方式2 上传github中的dockerfile方式3 上传dockerhub中的第三方镜像1. 在ubuntu在安装docker2. 下载第三方镜像3. 修改hosts4. 下载证书5…

【重拾计划】[NOIP1998 提高组] 车站

今日题目 [NOIP1998 提高组] 车站 题目描述 火车从始发站&#xff08;称为第 1 1 1 站&#xff09;开出&#xff0c;在始发站上车的人数为 a a a&#xff0c;然后到达第 2 2 2 站&#xff0c;在第 2 2 2 站有人上、下车&#xff0c;但上、下车的人数相同&#xff0c;因此…

python字典:揭秘无序元素的奥秘之旅

前言 在编程中&#xff0c;数据的组织和管理是一个关键的方面。对于处理和操作数据&#xff0c;Python 提供了许多强大的数据结构&#xff0c;其中最常用和灵活的之一就是字典(Dictionary)。 无论您是初学者还是有经验的开发者&#xff0c;掌握字典的基本知识是非常重要的。本…

解决PyInstaller打包selenium脚本时弹出driver终端窗口

解决PyInstaller打包selenium脚本时弹出driver终端窗口 找到service.py C:\Users\XXX\AppData\Roaming\Python\Python39\site-packages\selenium\webdriver\common\service.py添加creationflags 在第77行添加: creationflags134217728使用PyInstaller打包 pyinstaller -F -w -…