【第22期】观点:IT 行业加班,到底有没有价值?

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链接)。或者,你可以用它来简化实验来看看不同配置选项有什么影响。

举报

相关文章推荐

Java中获取Log4j日志文件,Mybatis 的ScriptRunner执行带pl/sql的 代码块脚本

在mybatis-3.2.2.jar中,ScriptRunner提供执行sql文件脚本的类, ScriptRunner runner = new ScriptRunner(Connection co...

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

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

程序员升职加薪指南!还缺一个“证”!

CSDN出品,立即查看!

定制MyBatis的日志

1.日志记录 MyBatis的日志记录主要是运用内部的LoggerFactory。内部的LoggerFactory的记录日志,实际是委托给第三方的架包,如下给出的所示,按照优先级来列出: 1)  ...

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

Mybatis内置的日志工厂提供日志功能,具体的日志实现有以下几种方式: SLF4J Apache Commons Logging Log4j 2 Log4j JDK logging 具体选择哪个日志实现由MyBatis的内置日志工厂确定。它会使用最先找到的(按上文列举的顺序查找)。...

SerfJ-0.4.1 REST服务器、Mybatis3.2.3 持久框架、Log4j-1.2.17 日志整合框架

SerfJ-0.4.1 REST服务器、Mybatis3.2.3 持久框架、Log4j-1.2.17 日志整合框架 1、SerfJ REST服务器 1.1、在eclipse中创建一个web项目...
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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