MyBatis学习总结(五)---MyBatis中日志的使用及使用log4j示例

  

Mybatis 的内置日志工厂提供日志功能,内置日志工厂将日志交给以下其中一种工具作代理:

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

    MyBatis 内置日志工厂基于运行时自省机制选择合适的日志工具。它会使用第一个查找得到的工具(按上文列举的顺序查找)。如果一个都未找到,日志功能就会被禁用。

    不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以在这种配置环境下的 MyBatis 会把它作为日志工具,记住这点非常重要。这将意味着,在诸如 WebSphere 的环境中,它提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。MyBatis 将你的 Log4J 配置忽略掉是相当令人郁闷的(事实上,正是因为在这种配置环境下,MyBatis 才会选择使用 Commons Logging 而不是 Log4J)。如果你的应用部署在一个类路径已经包含 Commons Logging 的环境中,而你又想使用其它日志工具,你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择别的日志工具。

   

<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.slf4j.Slf4jImpl.java的实现)

   你也可以调用如下任一方法来使用日志工具:

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

 如果你决定要调用以上某个方法,请在调用其它 MyBatis 方法之前调用它。另外,仅当运行时类路径中存在该日志工具时,调用与该日志工具对应的方法才会生效,否则 MyBatis 一概忽略。如你环境中并不存在 Log4J,你却调用了相应的方法,MyBatis 就会忽略这一调用,转而以默认的查找顺序查找日志工具。

    输出日志方法一:使用标准的日志输出

   这种方法只需要在MyBatis的配置文件中加入一个设置即可,而不需要导入log4j包,也不需要对log4j进行配置

    

扫描二维码关注公众号,回复: 4250853 查看本文章
  <settings>
		<setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>

	<!-- 引用并使用db.properties -->
	<properties resource="db.properties" />
	
	<settings>
		<setting name="logImpl" value="STDOUT_LOGGING" />
	</settings>
	
	<!-- environments:信息配置的是连接数据库的(数据源的)一些参数,如用户名,密码等,MyBatis数据库操作的session就是根据这些信息初始化的 -->
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<!-- 数据源配置 -->
			<dataSource type="POOLED">
				<!-- 数据库驱动 -->
				<property name="driver" value="${driver}" />
				<!-- 数据库连接URL -->
				<property name="url" value="${url}" />
				<!-- 数据库用户名和密码 -->
				<property name="username" value="${username}" />
				<property name="password" value="${password}" />
			</dataSource>
		</environment>
	</environments>



	<!-- mappers:配置的是一个个Mapper文件,这些文件来约束数据库的信息(Relationship) 和 对象(Object)的信息映射(Mapper);它负责完成对象和数据库表的映射,是ORM最具体的配置 -->
	<mappers>
		<!-- 配置实体映射文件 -->
		<mapper resource="com/mybatisstudy/dao/userMapper.xml" />
	</mappers>


</configuration>

   使用这种方式控制台的输出示例:

Logging initialized using 'class org.apache.ibatis.logging.stdout.StdOutImpl' adapter.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
PooledDataSource forcefully closed/removed all connections.
Opening JDBC Connection
Created connection 76432244.
Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@48e4374]
==>  Preparing: INSERT INTO user(id,name,sex,age) VALUES(?,?,?,?); 
==> Parameters: 1003(Integer), 小杰(String), 男(String), 20(Integer)
<==    Updates: 1
==>  Preparing: UPDATE user SET age=? ,name=? WHERE id=? 
==> Parameters: 21(Integer), 小明(String), 1003(Integer)
<==    Updates: 1
==>  Preparing: SELECT * FROM user where id = ? ; 
==> Parameters: 1001(Integer)
<==    Columns: id, name, sex, age
<==        Row: 1001, 小明, 男, 21
<==      Total: 1
[id:1001,name:小明,sex:男,age:21]
==>  Preparing: DELETE FROM user WHERE id=?; 
==> Parameters: 1003(Integer)
<==    Updates: 1
==>  Preparing: SELECT * FROM user ; 
==> Parameters: 
<==    Columns: id, name, sex, age
<==        Row: 1001, 小明, 男, 21
<==        Row: 1002, 小华, 男, 18
<==      Total: 2
[[id:1001,name:小明,sex:男,age:21], [id:1002,name:小华,sex:男,age:18]]
Rolling back JDBC Connection [com.mysql.jdbc.JDBC4Connection@48e4374]
Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@48e4374]
Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@48e4374]
Returned connection 76432244 to pool.

        输出日志方法二:使用log4j日志输出

       1.导入log4j包,如:log4j-1.2.17.jar

       2.在MyBatis的配置文件中配置:

      

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

      3.根据自己的需要配置log4j配置文件中的内容(如配置输出端(Appenders)和日志格式化器(Layout)等)

     示例(输出到控制台和文件中):

      

log4j.rootLogger=DEBUG,CONSOLE,FILE
#DEBUG,CONSOLE,FILE,ROLLING_FILE,MAIL,DATABASE,LF5_APPENDER

log4j.addivity.org.apache=true
 

# Console Appender
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.Threshold=DEBUG
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n


# File Appender
log4j.appender.FILE=org.apache.log4j.FileAppender
#此处是用绝对路径
#也可以用相对路径,如在一个listener中获取项目运行的真正路径apppath,然后如:${apppath}/MyBatis.log
log4j.appender.FILE.File=D:/MyBatis.log
log4j.appender.FILE.Append=false
log4j.appender.FILE.layout=org.apache.log4j.PatternLayout
log4j.appender.FILE.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
# Use this layout for LogFactor 5 analysis






     控制台的输出结果:

     

2018-11-23 11:10:09,634 [main] DEBUG [org.apache.ibatis.logging.LogFactory] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2018-11-23 11:10:09,755 [main] DEBUG [org.apache.ibatis.logging.LogFactory] - Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
2018-11-23 11:10:09,780 [main] DEBUG [org.apache.ibatis.datasource.pooled.PooledDataSource] - PooledDataSource forcefully closed/removed all connections.
2018-11-23 11:10:09,780 [main] DEBUG [org.apache.ibatis.datasource.pooled.PooledDataSource] - PooledDataSource forcefully closed/removed all connections.
2018-11-23 11:10:09,781 [main] DEBUG [org.apache.ibatis.datasource.pooled.PooledDataSource] - PooledDataSource forcefully closed/removed all connections.
2018-11-23 11:10:09,781 [main] DEBUG [org.apache.ibatis.datasource.pooled.PooledDataSource] - PooledDataSource forcefully closed/removed all connections.
2018-11-23 11:10:09,950 [main] DEBUG [org.apache.ibatis.transaction.jdbc.JdbcTransaction] - Opening JDBC Connection
2018-11-23 11:10:10,383 [main] DEBUG [org.apache.ibatis.datasource.pooled.PooledDataSource] - Created connection 835227336.
2018-11-23 11:10:10,384 [main] DEBUG [org.apache.ibatis.transaction.jdbc.JdbcTransaction] - Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@31c88ec8]
2018-11-23 11:10:10,390 [main] DEBUG [com.mybatisstudy.dao.IUserDao.addUser] - ==>  Preparing: INSERT INTO user(id,name,sex,age) VALUES(?,?,?,?); 
2018-11-23 11:10:10,479 [main] DEBUG [com.mybatisstudy.dao.IUserDao.addUser] - ==> Parameters: 1003(Integer), 小杰(String), 男(String), 20(Integer)
2018-11-23 11:10:10,520 [main] DEBUG [com.mybatisstudy.dao.IUserDao.addUser] - <==    Updates: 1
2018-11-23 11:10:10,531 [main] DEBUG [com.mybatisstudy.dao.IUserDao.updateUser] - ==>  Preparing: UPDATE user SET age=? ,name=? WHERE id=? 
2018-11-23 11:10:10,532 [main] DEBUG [com.mybatisstudy.dao.IUserDao.updateUser] - ==> Parameters: 21(Integer), 小明(String), 1003(Integer)
2018-11-23 11:10:10,538 [main] DEBUG [com.mybatisstudy.dao.IUserDao.updateUser] - <==    Updates: 1
2018-11-23 11:10:10,544 [main] DEBUG [com.mybatisstudy.dao.IUserDao.selectUserById] - ==>  Preparing: SELECT * FROM user where id = ? ; 
2018-11-23 11:10:10,545 [main] DEBUG [com.mybatisstudy.dao.IUserDao.selectUserById] - ==> Parameters: 1001(Integer)
2018-11-23 11:10:10,576 [main] DEBUG [com.mybatisstudy.dao.IUserDao.selectUserById] - <==      Total: 1
[id:1001,name:小明,sex:男,age:21]
2018-11-23 11:10:10,579 [main] DEBUG [com.mybatisstudy.dao.IUserDao.deleteUserById] - ==>  Preparing: DELETE FROM user WHERE id=?; 
2018-11-23 11:10:10,580 [main] DEBUG [com.mybatisstudy.dao.IUserDao.deleteUserById] - ==> Parameters: 1003(Integer)
2018-11-23 11:10:10,581 [main] DEBUG [com.mybatisstudy.dao.IUserDao.deleteUserById] - <==    Updates: 1
2018-11-23 11:10:10,583 [main] DEBUG [com.mybatisstudy.dao.IUserDao.selectAllUser] - ==>  Preparing: SELECT * FROM user ; 
2018-11-23 11:10:10,584 [main] DEBUG [com.mybatisstudy.dao.IUserDao.selectAllUser] - ==> Parameters: 
2018-11-23 11:10:10,585 [main] DEBUG [com.mybatisstudy.dao.IUserDao.selectAllUser] - <==      Total: 2
[[id:1001,name:小明,sex:男,age:21], [id:1002,name:小华,sex:男,age:18]]
2018-11-23 11:10:10,587 [main] DEBUG [org.apache.ibatis.transaction.jdbc.JdbcTransaction] - Rolling back JDBC Connection [com.mysql.jdbc.JDBC4Connection@31c88ec8]
2018-11-23 11:10:10,828 [main] DEBUG [org.apache.ibatis.transaction.jdbc.JdbcTransaction] - Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@31c88ec8]
2018-11-23 11:10:10,828 [main] DEBUG [org.apache.ibatis.transaction.jdbc.JdbcTransaction] - Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@31c88ec8]
2018-11-23 11:10:10,829 [main] DEBUG [org.apache.ibatis.datasource.pooled.PooledDataSource] - Returned connection 835227336 to pool.

      日志文件中的内容:

猜你喜欢

转载自blog.csdn.net/qq_40348465/article/details/84376811