mybatis日志

翻译 2017年01月03日 22:37:00

MyBatis 通过使用内部的日志工厂来提供日志信息,日志工厂可以授权下面这些日志实现类中的任何一种:
(1)SLF4J
(2)Apache Commons Logging
(3)Log4j 2
(4)Log4j
(5)JDK logging
MyBatis 内部的日志工厂解决方案选择时基于运行的introspection ,MyBatis 日志工厂将使用它所发现的第一次使用日志的实现(在上面的顺序中搜索实现)。如果MyBatis 没有发现上面的任何实现,日志将会被禁用。
很多环境把Commons Logging作为应用服务路径的一部分(比如WebSphere和Tomcat ),在这样的环境中知道这些是很重要的,MyBatis 将会使用Commons Logging作为日志的实现。在像WebSphere 这样的环境中,意味着你的Log4J 配置将会被忽略,因为WebSphere 提供他自己的 Commons Logging专有的实现。因为它的出现会让MyBatis 忽略你的Log4J 配置(实际,MyBatis 忽略你的Log4J 配置是因为MyBatis 再这样的环境中将会使用Commons Logging),这是很令人沮丧的。如果你的应用正在一个classpath中包含Commons Logging的环境中运行,但是你却想使用其他的日志实现,此时你可以通过在mybatis-config.xml 文件中添加如下的设置来选择一个不同的日志实现,代码如下:

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

有效的value包括SLF4J, LOG4J, LOG4J2, JDK_LOGGING, COMMONS_LOGGING, STDOUT_LOGGING, NO_LOGGING 或者一个全限定实现了org.apache.ibatis.logging.Log ,并且有个拥有String类型参数的构造器的类。
你也可以选择调用下面这些方法的实现:

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();

如果你选择调用这些方法之一,你应该在调用MyBatis的任何方法之前这样做。而且,这些方法只可以转换到请求日志实现,当然这些实现应该可以在运行时路径上被执行。例如,如果你尝试选择Log4J 日志,Log4J 在运行时不可以被执行,接着MyBatis 就会忽略请求使用Log4J ,并且会使用正常的运算法则来发现日志的实现。
However the example configuration below should get you started. If you would like to know more about these frameworks, you can get more information from the following locations:
SLF4J, Apache Commons Logging, Apache Log4J and the JDK Logging API 的细节超出了这篇文档的范围。然而,下面的这个配置例子你应该明白。如果你想了解更多这些框架,你可以从下面的这些中获取更多的信息。

  • http://www.slf4j.org/
  • http://commons.apache.org/proper/commons-logging/
  • http://logging.apache.org/log4j/2.x/
  • http://www.oracle.com/technetwork/java/index.html
    日志配置
    为了看到MyBatis 日志语句你可以打开一个包,完全映射的类名,一个命名空间或者一个全限定的语句名字。
    你怎样做取决于你在使用时日志的实现。我们将以Log4J作为示范来演示。配置日志服务是一个简单的事情,只需要包含一个或者更多的额外配置文件(比如:log4j.properties)或者有时候需要添加一个新jar(比如:log4j.jar)。下面的配置例子将会通过使用Log4J 来配置所有的日志服务。这里有两个步骤:
    步骤一:添加Log4J JAR文件
    因为我们使用的是Log4J,我们将需要确定它的JAR文件对于我们的应用程序是可用的。为了使用Log4J,你需要添加JAR文件到你的应用路径中。你可以通过上面的URL地址来下载Log4J。
    For web or enterprise applications you can add the log4j.jar to your WEB-INF/lib directory, or for a standalone application you can simply add it to the JVM -classpath startup parameter.
    对于web或者企业级应用你可以在你的 WEB-INF/lib 目录中添加 log4j.jar
    步骤2:配置log4j
    Configuring Log4J is simple. Suppose you want to enable the log for this mapper:
    配置Log4J 很简单,假设你想打开这个映射的日志:
package org.mybatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}

创建一个叫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的详细的日志信息,和你的应用剩余类的错误。
如果你想在一个较好的级别调整日志,你可以用具体的语句来打开日志,而不是打开所有的映射文件,下面的这行代码可以打开selectBlog声明的日志:

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

相反,或许你想打开一组映射的日志,在那种情况下,你应该在属于你的映射中增加一个logger

log4j.logger.org.mybatis.example=TRACE

There are queries that can return huge result sets. In that cases you may want to see the SQL statement but not the results. For that purpose SQL statements are logged at the DEBUG level (FINE in JDK logging) and results at the TRACE level (FINER in JDK logging), so in case you want to see the statement but not the result, set the level to DEBUG.
这有 可以返回巨大的结果集的问题,在那种情况下,你或许想看SQL语句而不是结果集,为了那个目的,SQL语句被记录在调试级别(在JDK日志中 (FINE in JDK logging) ),结果集处于追踪级别(FINER in JDK logging),所以如果你想要查看语句而不查看结果,请将级别设置为调试.。

log4j.logger.org.mybatis.example=DEBUG

但是如果你不使用映射接口而使用映射的XML文件会怎么样?

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://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>

In that case you can enable logging for the whole XML file by adding a logger for the namespace as shown below:
在那种情况下你可以通过为namespace添加一个logger来打开所有的日志XML文件,正如下面的代码:

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

或者对于一个明确的语句:

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

Yes, as you may have noticed, there is no difference in configuring logging for mapper interfaces or for XML mapper files.
是的,正如你所注意到的,对于在配置日志的时候,使用映射接口或者是XML配置文件是没有区别的。
注意:如果你正在MyBatis 中使用SLF4J 或者Log4j 2,将会称之为使用标记MYBATIS。
The remaining configuration in the log4j.properties file is used to configure the appenders, which is beyond the scope of this document. However, you can find more information at the Log4J website (URL above). Or, you could simply experiment with it to see what effects the different configuration options have.
在log4j.properties文件剩余的配置是被用来配置附加项,这些附加项超出了本文档的作用范围。然而,你可以发现更多的信息在Log4J的网页中(就是前面的URL链接)。或者,你可以用它来简化实验来看看不同配置选项有什么影响。

相关文章推荐

Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志。有些时候就不能。 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都不起作用。 ...
  • isea533
  • isea533
  • 2014年04月04日 14:24
  • 74793

mybatis 开启日志记录 打印sql语句

使用mybatis 的时候 ,无法查看sql 语句 !!非常不方便调试程序,所以 配置了日志记录输出sql  ,在控制台打印, 1.要配置mybatis 使用log4j 记录日志,  导入 log4...

mybatis结合log4j打印SQL日志

mybatis结合log4j打印SQL日志 默认的mybatis不能打印出SQL日志,不便于查看调试,需要结合log4jdbc-log4j2就可以完整的输入SQL的调试信息。pom.xml 配置mav...
  • 21aspnet
  • 21aspnet
  • 2016年01月22日 11:56
  • 17855

MyBatis3 用log4j在控制台输出 SQL

为什么要在控制台输出 SQL 呢?当然是为了开发调试的时候方便了。如果一个 数据库相关的操作出现了问题,我们可以根据输出的SQL语句快速排查问题。输出的信息:[org.mybatis.spring.S...

Mybatis 的Log4j日志输出问题 - 以及有关日志的所有问题

使用Mybatis的时候,有些时候能输出(主要是指sql,参数,结果)日志。有些时候就不能。 无法输出日志的时候,无论怎么配置log4j,不管是properties的还是xml的,都...

springMVC +Mybatis +spring aop 实现用户系统操作日志记录

业务场景:业务要求记录用户在系统的操作行为,并保存到数据库当中。 1、自定义注解,记录操作日志 import java.lang.annotation.Documented; import jav...

mybatis打印日志实例

  • 2015年12月25日 21:14
  • 15KB
  • 下载

springmvc整合Mybatis的Log4j日志输出问题

当我们进行web开发的时候总是看到配置的log4j日志在控制台无法显示mybatis的主要是指sql、参数、结果,出现这种问题有两种情况: 第一种情况,下面文档描述的mybatis本身内置很多种日志框...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mybatis日志
举报原因:
原因补充:

(最多只允许输入30个字)