MyBatis日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

Logging

MyBatis通过内部的日志工厂提供日志信息。内部的日志工厂委托下列之一的日志工具来具体实现日志:

  • SLF4J

  • Apache Commons Logging

  • Log4j 2

  • Log4j

  • JDK logging

具体使用哪个日志工具是由Log Factory在运行时决定的。MyBatis log factory把他找到 第一个日志工具作为它的日志实现(查找的顺序就是上面列出的顺序)。如果MyBatis一个都没有找到,那么MyBatis的日志输出将不可用。

许多环境把Commons Logging作为应用服务器类路径的一部分(典型的例子是Tomcat和WebSphere)。在这种环境中,MyBatis使用Commons Logging作为日志实现。在像WebSphere这种环境下,你的Log4j配置将被忽略,因为它自己提供了Commons Logging的实现。这是非常令人沮丧的,因为MyBatis忽略了你的Log4j配置(事实上,MyBatis忽略你的Log4j配置是因为在这样的环境下它使用Commons Logging)。如果你的应用程序运行在classpath已经包含Commons Logging的环境下,而你又想用其它的日志实现,这种情况下,你可以在mybatis-config.xml中添加如下配置已选择一个不同的日志实现:

<configuration>
  <settings>
    ...    
    <setting name="logImpl" value="LOG4J"/>
    ...  
  </settings>
</configuration>

logImpl属性的有效值是SLF4J, LOG4J, LOG4J2, JDK_LOGGING, COMMONS_LOGGING, STDOUT_LOGGING, NO_LOGGING或者是一个实现了org.apache.ibatis.logging.Log接口并且提供一个字符串作为形参的构造方法的的类的完全限定名。

当然,你也可以选择实现下列方法:

org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
org.apache.ibatis.logging.LogFactory.useJdkLogging();
org.apache.ibatis.logging.LogFactory.useCommonsLogging();
org.apache.ibatis.logging.LogFactory.useStdOutLogging();

这些方法只是用于切换请求日志的具体实现,前提是这些实现在classpath中都是可用的。比如,你选择Log4j,但是Log4j在运行时不可用,那么MyBatis将忽略到Log4j的日志请求,然后按照正常的逻辑重新选择日志实现。

SLF4J, Apache Commons Logging, Apache Log4J and the JDK Logging这些API的使用不在本文档的讲解范围内,但是下面有一个例子来讲解如何使用。如果你想更多的了解这些日志框架,你可以从下列地址得到更多信息:

Logging Configuration

为了查看MyBatis的日志语句,你能够将日志打在一个包、一个mapper的完全限定类名、一个命名空间或者一个完全限定的语句名。

下面我们将展示怎样用Log4j来实现。配置日志是一件很简单的事情,只需引入一个或多个配置文件(比如:log4j.properties)和一些Jar包(比如:log4j.jar)即可。下面的示例配置就展示了如何使用log4j来作为日志服务,这在第2步。

Step 1: Add the Log4J JAR file

因为要使用Log4j,所以我们必须确保jar包在我们的应用程序中是可用的,为了使用Log4j,你需要添加jar文件到你的应用程序classpath中。

Step 2: Configure Log4J

配置log4j是很简单的,假如你希望日志对于下面这个Mapper是可用的:

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

在classpath中创建一个名字叫log4j.properties的文件:

# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n

上面这段配置将导致log4j报告org.mybatis.example.BlogMapper的详细日志和应用程序中其它类中ERROR级别的日志。

如果你只想查看特定的语句的日志,而不是整个Mapper文件,那么你只需要这样配置:

log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

相反,你可能想要记录所以Mapper的日志,那么你需要这样配置:

log4j.logger.org.mybatis.example=TRACE

这里有个问题,这样配置的话中会有大量的结果集包含在日志中,而事实上你可能只是想看SQL语句而不是返回的结果集。出于这样的考虑,SQL语句的日志级别是DEBUG,而结果集的日志级别是TRACE,所以万一你只想看SQL语句而不关心结果集的话,你可以将级别设置诶DEBUG。

log4j.logger.org.mybatis.example=DEBUG

但是,如果你不是用mapper接口,而是用mapper xml文件呢?就像下面这样:

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

这种情况下,你可以在命名空间上添加一个logger来记录整个xml的日志了

log4j.logger.org.mybatis.example.BlogMapper=TRACE

或者是某个特定的SQL语句

log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE

是的,正如你看到的那样,在mapper接口和在mapper xml文件上配置日志是没有区别的。


原文:http://www.mybatis.org/mybatis-3/logging.html


wKiom1bk6cbh9PpKAABWxcsNgqI167.png

本文转自   手不要乱摸  51CTO博客,原文链接:http://blog.51cto.com/5880861/1750493

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
4月前
|
SQL Java 关系型数据库
SpringBoot 系列之 MyBatis输出SQL日志
这篇文章介绍了如何在SpringBoot项目中通过MyBatis配置输出SQL日志,具体方法是在`application.yml`或`application.properties`中设置MyBatis的日志实现为`org.apache.ibatis.logging.stdout.StdOutImpl`来直接在控制台打印SQL日志。
SpringBoot 系列之 MyBatis输出SQL日志
|
4月前
|
Java 数据库连接 数据库
后端框架的学习----mybatis框架(6、日志)
这篇文章介绍了如何在MyBatis框架中使用日志功能,包括配置MyBatis的日志实现、使用log4j作为日志工具,以及如何通过配置文件控制日志级别和输出格式。
|
5月前
|
SQL 监控 Java
IDEA插件-Mybatis Log Free日志替换
MyBatis Log Free 是一个免费的用于在 IntelliJ IDEA 中显示 MyBatis 日志的插件。它可以帮助您更方便地查看和分析 MyBatis 的 SQL 执行情况,以及定位潜在的性能问题,提高开发效率。
413 0
IDEA插件-Mybatis Log Free日志替换
|
5月前
|
XML Java 数据格式
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
支付系统----微信支付20---创建案例项目--集成Mybatis-plus的补充,target下只有接口的编译文件,xml文件了,添加日志的写法
|
6月前
|
Java 数据库连接 数据库
Spring日志完结篇,MyBatis操作数据库(入门)
Spring日志完结篇,MyBatis操作数据库(入门)
|
6月前
|
SQL Java 数据库连接
IDEA插件(MyBatis Log Free)
IDEA插件(MyBatis Log Free)
388 0
|
6月前
|
SQL Java 数据库连接
Mybatis日志SQL解析
Mybatis日志SQL解析
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
220 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
279 3
|
2月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1674 14