Github Mybatis深入学习之日志 .

 日志(Logging)它可以记录跟踪系统错误,是系统维护不可缺少的部分。原文地址: http://mybatis.github.io/mybatis-3/logging.html

 MyBatis提供的日志信息通过使用内部记录工厂,内部的日志工厂将日志信息委托给以下日志实现:

  • SLF4J
  • Apache Commons Logging
  • Log4j 2
  • Log4j
  • JDK logging

           选择的日志解决方案,是基于运行时内省MyBatis的日志取决于内部工厂。 MyBatis的日志工厂将使用第一个发现日志实现(实现上述顺序搜索) 。如果MyBatis的发现没有上述的实现,然后记录将被禁用。 许多环境运输下议院记录作为应用服务器类路径(很好的例子包括Tomcat和WebSphere的)的一部分。重要的是要知道,在这样的环境中, MyBatis将会使用共享日志记录,日志记录实现。如WebSphere的环境中,这将意味着你的Log4J配置将被忽略,因为WebSphere提供自己的专有实施下议院记录。这可以是非常令人沮丧的,因为它会出现,MyBatis会忽略您的Log4J配置(其实,MyBatis会忽视您的Log4J配置,因为MyBatis将会在这样的环境中使用共享日志记录) 。如果您的应用程序运行在下议院日志包含在类路径的环境下,但你宁愿使用的其他日志记录实现,你可以选择一个不同的日志记录实现的MyBatis -config.xml文件中添加一个设置如下:

    1. <SPAN style="FONT-SIZE: 12px"><configuration>  
    2.   <settings>  
    3.     ...  
    4.     <setting name="logImpl" value="LOG4J"/>  
    5.     ...  
    6.   </settings>  
    7. </configuration></SPAN>  
    <span style="font-size:12px;"><configuration>
      <settings>
        ...
        <setting name="logImpl" value="LOG4J"/>
        ...
      </settings>
    </configuration></span>
    有效值是SLF4J,log4j,LOG4J2,JDK_LOGGING,COMMONS_LOGGING,STDOUT_LOGGING,NO_LOGGING或完全限定类名实现org.apache.ibatis.logging.Log的,并得到一个字符串作为构造函数参数。您也可以选择执行,通过调用下面的方法之一:
    1. <SPAN style="FONT-SIZE: 12px">org.apache.ibatis.logging.LogFactory.useSlf4jLogging();  
    2. org.apache.ibatis.logging.LogFactory.useLog4JLogging();  
    3. org.apache.ibatis.logging.LogFactory.useLog4J2Logging();  
    4. org.apache.ibatis.logging.LogFactory.useJdkLogging();  
    5. org.apache.ibatis.logging.LogFactory.useCommonsLogging();  
    6. org.apache.ibatis.logging.LogFactory.useStdOutLogging();</SPAN>  
    <span style="font-size:12px;">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();</span>
            如果您选择调用这些方法之一,你应该这样做之前调用任何其他MyBatis的方法。此外,这些方法只会切换到请求的日志实现,如果实现是运行时类路径。例如,如果您尝试选择Log4J日志和Log4J是不是在运行时可用,那么MyBatis将忽略该请求使用Log4J,发现日志实现将使用它的正常算法。
          SLF4J,Apache common logging,Apache Log4J,和JDK日志记录API的细节超出了本文的讨论范围。然而,下面的示例配置应该让你开始。如果您想了解更多有关这些框架,你可以得到更多的信息,从下列位置:
  • SLF4J
  • Apache Commons Logging
  • Apache Log4j 1.x and 2.x
  • JDK Logging API

    日志记录配置(Logging Configuration)

         要看到MyBatis的日志报表,您可以启用一个包,一个映射器完全合格的类名,命名空间OA完全合格声明名称的记录。同样,你是怎么做到这一点的是依赖于使用的日志实现。我们将展示如何使用log4j。配置日志记录服务是根本的问题,包括一个或多个额外的配置文件(例如log4j.properties文件),有时一个新的JAR文件(如log4j.jar的)。以下的配置例子使用Log4J作为一个供应商的完整的日志记录服务。有两个步骤。

    • 步骤1:添加Log4J的JAR文件

              因为我们使用Log4J,我们将需要确保其JAR文件是提供给我们的应用程序。使用Log4J,你需要将JAR文件添加到您的应用程序的classpath。您可以从上面的URL下载Log4J。对于Web或企业应用程序,您可以添加,将log4j.jar WEB-INF/lib目录中,或为一个独立的应用程序,你可以简单地把它添加到类路径中的JVM启动参数。

    • 步骤2:配置log4j

             log4j的配置很简单,假设你要启用此映射日志:

    1. <SPAN style="FONT-SIZE: 12px">package org.mybatis.example;  
    2. public interface BlogMapper {  
    3.   @Select("SELECT * FROM blog WHERE id = #{id}")  
    4.   Blog selectBlog(int id);  
    5. }  
    6. </SPAN>  
    <span style="font-size:12px;">package org.mybatis.example;
    public interface BlogMapper {
      @Select("SELECT * FROM blog WHERE id = #{id}")
      Blog selectBlog(int id);
    }
    </span>
    创建一个名为log4j.properties文件内容如下所示,将其放置在你的classpath中:

    1. <SPAN style="FONT-SIZE: 12px"># Global logging configuration  
    2. log4j.rootLogger=ERROR, stdout  
    3. # MyBatis logging configuration...  
    4. log4j.logger.org.mybatis.example.BlogMapper=TRACE  
    5. # Console output...  
    6. log4j.appender.stdout=org.apache.log4j.ConsoleAppender  
    7. log4j.appender.stdout.layout=org.apache.log4j.PatternLayout  
    8. log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n  
    9. </SPAN>  
    <span style="font-size:12px;"># 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
    </span>
    上述文件将导致log4j的报告详细的日志记录为org.mybatis.example.BlogMapper只是你的应用程序其余类的错误。
    如果你想更精细的水平调整日志记录,可以为特定的语句,而不是整个映射文件打开记录。以下的生产线将使只是记录的selectBlog声明:
    1. <SPAN style="FONT-SIZE: 12px">log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE</SPAN>  
    <span style="font-size:12px;">log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE</span>
    此外,你可能希望要启用日志记录的一组映射器。在这种情况下,你应该添加记录器根包映射器所在:

    1. <SPAN style="FONT-SIZE: 12px">log4j.logger.org.mybatis.example=TRACE</SPAN>  
    <span style="font-size:12px;">log4j.logger.org.mybatis.example=TRACE</span>
    有些查询可以返回巨大的结果集。在这种情况下,你可能希望看到的SQL语句,但不是结果集。为了这个目的,SQL语句都被记录在DEBUG级别的(罚款JDK记录)和结果的跟踪级别(细JDK日志),所以如果你想看到的语句,但没有结果,设置级别设置为DEBUG。
    1. <SPAN style="FONT-SIZE: 12px">log4j.logger.org.mybatis.example=DEBUG</SPAN>  
    <span style="font-size:12px;">log4j.logger.org.mybatis.example=DEBUG</span>
    但是,如果你不使用映射接口,但像这样的一个XML映射文件呢?
    1. <SPAN style="FONT-SIZE: 12px"><?xml version="1.0" encoding="UTF-8" ?>  
    2. <!DOCTYPE mapper  
    3.   PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"  
    4.   "http://mybatis.org/dtd/mybatis-3-mapper.dtd">  
    5. <mapper namespace="org.mybatis.example.BlogMapper">  
    6.   <select id="selectBlog" parameterType="int" resultType="Blog">  
    7.     select * from Blog where id = #{id}  
    8.   </select>  
    9. </mapper></SPAN>  
    <span style="font-size:12px;"><?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" parameterType="int" resultType="Blog">
        select * from Blog where id = #{id}
      </select>
    </mapper></span>
    在这种情况下,你可以启用日志记录整个XML文件添加一个logger的命名空间,如下所示:

    1. <SPAN style="FONT-SIZE: 12px">log4j.logger.org.mybatis.example.BlogMapper=TRACE</SPAN>  
    <span style="font-size:12px;">log4j.logger.org.mybatis.example.BlogMapper=TRACE</span>
    或一个特定的语句:

    1. <SPAN style="FONT-SIZE: 12px">log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE</SPAN>  
    <span style="font-size:12px;">log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE</span>
    是的,正如你可能已经注意到了,这里没有什么区别,在配置映射接口或XML映射文件记录。
    注:如果您正在使用SLF4J或Log4j2 MyBatis会调用它使用标记的MyBatis。
    其余的配置log4j.properties文件是用来配置追加,这是超出本文件的范围。但是,你可以找到更多的信息的Log4J的网站(上述网址)。或者,你可以简单地尝试它,看看有什么效果有不同配置选项。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值