Mybatis 日志配置

要查看MyBatis的日志语句,您可以在一个包、一个完全限定的映射器类名、一个命名空间或一个完全限定的语句名称上启用日志记录。

再次强调,如何做这取决于所使用的日志实现。我们将展示如何在SLF4J(Logback)中进行配置。配置日志服务只需添加一个或多个额外的配置文件(例如logback.xml),有时还需要添加一个新的JAR文件。以下示例配置将使用SLF4J(Logback)作为提供程序配置完整的日志服务。有2个步骤。

第一步: 添加 SLF4J 和 Logback JAR包

由于我们使用SLF4J(Logback),我们需要确保它的JAR文件对我们的应用程序可用。要使用SLF4J(Logback),您需要将JAR文件添加到应用程序的类路径中。

对于Web或企业应用程序,您可以将logback-classic.jar、logback-core.jar和slf4j-api.jar添加到您的WEB-INF/lib目录中,或者对于独立应用程序,您可以直接将其添加到JVM的-classpath启动参数中。

如果您使用Maven,您可以通过在pom.xml文件中添加以下设置来下载JAR文件。

<dependency><groupId>ch.qos.logback</groupId><artifactId>logback-classic</artifactId><version>1.x.x</version>
</dependency>
第二步: 配置 Logback

配置Logback非常简单。假设您想要启用这个Mapper的日志:

package org.mybatis.example;
public interface BlogMapper {@Select("SELECT * FROM blog WHERE id = #{id}")Blog selectBlog(int id);
}

 创建一个名为logback.xml的文件,内容如下,并将其放置在类路径中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration><appender name="stdout" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%5level [%thread] - %msg%n</pattern></encoder></appender><logger name="org.mybatis.example.BlogMapper"><level value="trace"/></logger><root level="error"><appender-ref ref="stdout"/></root></configuration>

上述文件将导致SLF4J(Logback)对org.mybatis.example.BlogMapper进行详细的日志记录,并对应用程序的其他类仅报告错误。

如果您想在更细的级别上调整日志记录,可以仅针对特定的语句而不是整个映射器文件开启日志记录。以下代码可仅为selectBlog语句启用日志记录:

<logger name="org.mybatis.example.BlogMapper.selectBlog"><level value="trace"/>
</logger>

相反地,您可能希望为一组映射器启用日志记录。在这种情况下,您应该将包含映射器的根包添加为一个记录器:

<logger name="org.mybatis.example"><level value="trace"/>
</logger>

有些查询可能返回大量的结果集。在这种情况下,您可能只想看到SQL语句而不是结果。为了实现这个目的,SQL语句被记录在DEBUG级别(JDK日志中的FINE级别),结果被记录在TRACE级别(JDK日志中的FINER级别)。因此,如果您只想看到语句而不是结果,请将日志级别设置为DEBUG。

<logger name="org.mybatis.example"><level value="debug"/>
</logger>

如果您没有使用映射器接口,而是使用类似这样的映射器XML文件,该怎么办呢?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper"><select id="selectBlog" resultType="Blog">select * from Blog where id = #{id}</select>
</mapper>

在这种情况下,您可以通过添加一个与命名空间相对应的记录器来为整个XML文件启用日志记录,示例如下:

<logger name="org.mybatis.example.BlogMapper"><level value="trace"/>
</logger>
或者针对特定语句进行配置:
<logger name="org.mybatis.example.BlogMapper.selectBlog"><level value="trace"/>
</logger>

是的,正如您可能已经注意到的那样,在配置映射器接口或XML映射器文件的日志记录时没有任何区别。

注意:如果您正在使用SLF4J或Log4j 2,MyBatis将使用标记MYBATIS来调用它。

配置Log4j 2的例子
<!-- pom.xml -->
<dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-core</artifactId><version>2.x.x</version>
</dependency>
<!-- log4j2.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<Configuration xmlns="http://logging.apache.org/log4j/2.0/config"><Appenders><Console name="stdout" target="SYSTEM_OUT"><PatternLayout pattern="%5level [%t] - %msg%n"/></Console></Appenders><Loggers><Logger name="org.mybatis.example.BlogMapper" level="trace"/><Root level="error" ><AppenderRef ref="stdout"/></Root></Loggers></Configuration>
配置Log4j的例子
<!-- pom.xml -->
<dependency><groupId>log4j</groupId><artifactId>log4j</artifactId><version>1.2.17</version>
</dependency>
# log4j.properties
log4j.rootLogger=ERROR, stdoutlog4j.logger.org.mybatis.example.BlogMapper=TRACElog4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
配置 JDK logging的例子
# logging.properties
handlers=java.util.logging.ConsoleHandler
.level=SEVEREorg.mybatis.example.BlogMapper=FINERjava.util.logging.ConsoleHandler.level=ALL
java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter
java.util.logging.SimpleFormatter.format=%1$tT.%1$tL %4$s %3$s - %5$s%6$s%n

 

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

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

相关文章

zdppy_api框架快速入门

概述 zdppy_api是一款为了快速开发而生的&#xff0c;基于异步的&#xff0c;使用简单的Python后端API接口开发框架。 本框架的目标是让Python后端开发变得越来越简单&#xff0c;直到发现原来还可以更简单&#xff01; 一切都是为了提高开发效率&#xff01;&#xff01;&…

标题:探索C语言中的While循环结构

各位少年&#xff1a; 在C语言编程中&#xff0c;循环是一种强大的工具&#xff0c;它允许我们重复执行一段代码&#xff0c;直到满足特定的条件为止。其中&#xff0c;while循环是一种常用的循环结构&#xff0c;它以其简洁的语法和灵活的应用场景赢得了程序员们的青睐。下面…

隧道代理HTTP工作原理:一场奇妙的网络魔法表演

嘿&#xff0c;小伙伴们&#xff01;今天我们要一起探索一个有趣的话题——隧道代理HTTP的工作原理。这不是普通的表演&#xff0c;而是一场奇妙的网络魔法表演&#xff01; 首先&#xff0c;让我们想象一下&#xff0c;网络世界就像一个大舞台&#xff0c;而我们每个人都是这…

RK3566 Android 11平台上适配YT8512C 100M PHY

RK3566代码之前适配的1000M IC RTL8211F , 现在需要在之前的基础上修改PHY IC 为裕泰的YT8512C ----------------------------------------------------------------------//将1000M 的配置关掉&#xff0c;改为100M 配置,查看RK3566 资料关于以太网的配置即可知道如何修改 #if…

Linux驱动开发简易流程

推荐视频&#xff1a; 正点原子【第四期】手把手教你学 Linux之驱动开发篇 小智-学长嵌入式Linux&Android底层开发入门教程 能力矩阵 基础能力矩阵 熟悉c/c、熟悉数据结构 熟悉linux系统&#xff0c;Shell脚本&#xff0c;Makefile/cmake/mk 文件IO、多线程、竞争、并发…

AutoSAR(基础入门篇)3.1-Autosar中RTE的概述

目录 一、RTE概述 1、什么是RTE 2、RTE的作用 二、RTE对Runnables的运行支撑 1、作为运行环境的主要功能点

Kubernetes 网络架构

大家好&#xff0c;我是升仔 Kubernetes 网络架构概览 Kubernetes 网络架构的设计理念是简化容器间的通信&#xff0c;确保 Pods 间可以无障碍通信&#xff0c;同时对外提供访问服务的机制。这一设计理念贯穿于整个网络架构。 Pod 网络模型 基本概念&#xff1a;在 Kuberne…

深度优先和广度优先

文章目录 前言一、深度和广度的区别二、代码演示1.准备数据,构造树2.深度优先遍历3.广度优先遍历 总结 前言 深度优先和广度优先的区别&#xff1a; 搜索方式不同 。深度优先搜索算法不全部保留结点&#xff0c;扩展完的结点从数据库中弹出删去&#xff1b;广度优先搜索算法需…

oracle-sga-shared_pool

shared pool 缓冲sql语句和执行计划 shared pool由三部分组成 free libray&#xff1a;缓存sql执行计划 row cathe &#xff1a;缓存数据字典 硬解析&#xff1a;1判断语法2判断对象是否存在3有没有权限4 从n个执行方案中选出最优解&#xff0c;生成执行计划&#xff0c;这一…

壮志酬筹>业务被裁>副业转正>收入回正。一个前黑马程序员老师的2023

从年初时的踌躇满志&#xff0c;到年中时整个业务线被砍。全职做前端训练营&#xff0c;四个多月的时间帮助100多名同学拿到了满意的offer&#xff0c;同时也让我的收入重归正轨。仅以这个视频记录我&#xff0c;一个普通程序员的 2023 。 视频版可直接访问 Hello&#xff0c;大…

Linux基础知识-命令

Linux的基础命令&#xff1a; 1.登录及其用户 sudo //使用超管权限&#xff08;没登录之前&#xff09;; sudo useradd -m //创建一个xx用户; userdel &#xff08;-r&#xff09;&#xff08;-f&a…

基于ElementUI二次封装弹窗组件

效果&#xff1a; 一、自定义内容类型弹窗 <!-- title&#xff1a;对话框的标题confirmLoading&#xff1a;当前是否处于提交中titleCenter&#xff1a;对话框标题居中方式footerCenter&#xff1a;底部按钮的对其方式visible&#xff1a;是否显示弹窗width&#xff1a;设置…

JavaScript:正则表达式

JavaScript&#xff1a;正则表达式 什么是正则表达式正则表达式语法定义正则表达式判断是否有匹配的字符串查找匹配的字符串 正则表达式匹配法则元字符边界符量词字符类 什么是正则表达式 正则表达式用于匹配字符串中字符的组合模式。 正则表达式会依据其自身语法&#xff0c;…

2023 搞懂git 工作目录---暂存区---本地仓库---版本库

最近了解了下git的底层原理&#xff08;大神录制的视频放在最下方&#xff09;&#xff0c;记录下&#xff1a; 工作区 就是存放待提交文件的目录&#xff08;下图图解标注&#xff09;比如pyhon_test目录暂存区 .git目录下的index文件 对应的指令 git add本地仓库 .gi…

【操作系统】测试五

文章目录 单选题填空题 单选题 可以实现虚拟存储器的方案是。 【正确答案&#xff1a;D】 A. 固定分区方式 B. 可变分区方式 C. 纯分页方式 D. 请求页式 哪种设备属于字符设备&#xff1f; 【 正确答案&#xff1a;D】 A. 磁盘 B. 磁带 C. 光盘 D. 键盘 哪种设备属于块设备&a…

图片格式 WebP、JPEG、PNG、SVG 及转换

文章目录 图片格式 WebP、JPEG、PNG、SVG 及转换1. 图片格式1.1 WebP1.2 JPEG1.3 PNG1.4 SVG1.5 ... 2. 格式转换2.1 Python 批量转 WebP2.2 在线转换工具2.2.1 Shutterstock2.2.2 PicWish2.2.3 MyEdit2.2.4 Freeconvert2.2.5 iLoveIMG Reference 图片格式 WebP、JPEG、PNG、SV…

数据压缩专题——静止图像的小波变换编码

随着数字图像技术的发展和应用的广泛&#xff0c;对图像的压缩和编码变得越来越重要。小波变换编码作为一种有效的图像压缩和编码方法&#xff0c;在静止图像处理中得到了广泛应用。本文将介绍静止图像的小波变换编码的基本原理和关键步骤&#xff0c;以及其在图像压缩中的应用…

nginx+keepalived实现七层负载

目录 一、部署nginx01、nginx02 二、keepalived配置&#xff08;抢占模式、master- backup模式&#xff09; 三、测试 四、非抢占模式&#xff08;backup-backup模式&#xff09; nginx01 11.0.1.31nginx0211.0.1.32虚拟IP&#xff08;VIP&#xff09;11.0.1.30 一、部署ngin…

java使用JSON工具解析字符串、数组详解

一&#xff1a;问题 1.最近自己在前后端数据交互时需要进行JSON格式字符串、数组数据进行转换&#xff0c;进行问题整理 2.遇到需要JSON字符串转换的朋友可以阅读 二&#xff1a;解析步骤 1.第一点首先确定需求&#xff0c;明确需要转的字符串是一个对象还是一个数组&#…

Large-Precision Sign using PBS

参考文献&#xff1a; [CLOT21] Chillotti I, Ligier D, Orfila J B, et al. Improved programmable bootstrapping with larger precision and efficient arithmetic circuits for TFHE[C]//Advances in Cryptology–ASIACRYPT 2021: 27th International Conference on the T…