前言
本章讲解MyBatis对于log4J的支持
方法
1.概念
我们知道,日志用来记录系统的运行信息。那么MyBatis也提供了对日志的支持,如果没有配置的话,MyBatis是不能够按照我们设计的格式进行日志输出的,接下来我们就配置以下MyBatis对于Log4J的支持。
log4J的相关知识请移步: JAVA串烧(四)Log4J的配置与使用
2.方法
1)修改mybatis-config.xml
通过阅读官方文档,我们找到log4j支持开启的“机关”:
在settings标签下的配置中存在如下配置:
我们将这个配置到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">
<!-- mybatis配置文件根路径 -->
<configuration>
<!-- 加载数据库连接资源文件 -->
<properties resource="db.properties"/>
<!--<properties>
<property name="driver" value="oracle.jdbc.driver.OracleDriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl"/>
<property name="username" value="scott"/>
<property name="password" value="tiger"/>
</properties>-->
<!-- 声明使用的配置信息 -->
<settings>
<!-- 指定所用日志的具体实现,未指定时将自动查找 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- 定义实体类的别名供用得到的地方使用 -->
<typeAliases>
<!-- 1.单一的为每一个类起别名 -->
<!--<typeAlias type="cn.edu.ccut.bo.User" alias="User"></typeAlias>-->
<!-- 2.扫描指定的包,包下所有的类自动起别名 -->
<package name="cn.edu.ccut.bo"/>
</typeAliases>
<!-- 数据库连接环境标签,可以配置多个数据库连接,default表示默认的连接,对应每个环境的id值 -->
<environments default="development">
<!-- 数据库连接环境配置标签,id唯一标识每个环境 -->
<environment id="development">
<!-- 声明使用的事务管理方式,这里采用原生的JDBC事务管理 -->
<transactionManager type="JDBC"></transactionManager>
<!-- 配置数据源,采用数据库连接池技术 -->
<dataSource type="POOLED">
<!-- 定义数据库连接必备的属性 -->
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<!-- 配置mapper文件关联 -->
<mappers>
<mapper resource="cn/edu/ccut/mapper/StudentMapper.xml"/>
</mappers>
</configuration>
特别的:注意标签之间的位置关系
2)导入log4j的jar包以及编写配置文件log4j.properties
### 设置日志输出级别和输出位置 ###
log4j.rootLogger = debug,console,file
### 控制台输出 ###
##指定输出位置使用的处理类
log4j.appender.console = org.apache.log4j.ConsoleAppender
##指定输出使用的输出格式处理类
log4j.appender.console.layout = org.apache.log4j.PatternLayout
##指定输出使用的具体格式
log4j.appender.console.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH:mm:ss}][%l]%n%m%n
### 文件输出 ###
##指定输出位置使用的处理类
log4j.appender.file = org.apache.log4j.DailyRollingFileAppender
##指定输出使用的输出格式处理类
log4j.appender.file.layout = org.apache.log4j.PatternLayout
##指定输出使用的具体格式
log4j.appender.file.layout.ConversionPattern = [%p] [%d{yyyy-MM-dd HH:mm:ss}][%l]%n%m%n
##指定日志输出的文件位置
log4j.appender.file.File = log/test.log
##指定每天产生的日志的名称格式
log4j.appender.file.DatePattern = '.'yyyy-MM-dd'.log'
##指定新的日志内容是否追加至文件
log4j.appender.file.Append = true
3)编写测试类测试对比
StudentTest.java
package cn.edu.ccut.test;
import cn.edu.ccut.bo.User;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.util.List;
public class StudentTest {
@Test
public void testLoginUser(){
SqlSession session = null;
try {
//获取sqlSessionFactory对象
InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
//获取sqlSession对象
session = sqlSessionFactory.openSession();
//使用sqlSession对象进行查询操作
List<User> list = session.selectList("doLogin");
for (User user: list) {
System.out.println(user);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
//关闭连接
session.close();
}
}
}
使用log4j后的控制台输出:
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" -ea -Didea.test.cyclic.buffer.size=1048576 "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar=56381:D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\bin" -Dfile.encoding=UTF-8 -classpath "D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\lib\idea_rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\plugins\junit\lib\junit-rt.jar;D:\Program Files\JetBrains\IntelliJ IDEA 2018.2.5\plugins\junit\lib\junit5-rt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;D:\IdeaProjects\SMS\web\WEB-INF\classes;D:\eclipse\apache-tomcat-8.5.35\lib\jsp-api.jar;D:\eclipse\apache-tomcat-8.5.35\lib\servlet-api.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\jstl.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\ojdbc6.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\standard.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\junit-4.12.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\log4j-1.2.17.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\mybatis-3.4.6.jar;D:\IdeaProjects\SMS\web\WEB-INF\lib\hamcrest-core-1.3.jar" com.intellij.rt.execution.junit.JUnitStarter -ideVersion5 -junit4 cn.edu.ccut.test.StudentTest,testLoginUser
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.logging.LogFactory.setImplementation(LogFactory.java:135)]
Logging initialized using 'class org.apache.ibatis.logging.log4j.Log4jImpl' adapter.
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.VFS.getClass(VFS.java:111)]
Class not found: org.jboss.vfs.VFS
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.JBoss6VFS.setInvalid(JBoss6VFS.java:142)]
JBoss 6 VFS API is not available in this environment.
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.VFS.getClass(VFS.java:111)]
Class not found: org.jboss.vfs.VirtualFile
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.VFS$VFSHolder.createVFS(VFS.java:63)]
VFS implementation org.apache.ibatis.io.JBoss6VFS is not valid in this environment.
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.VFS$VFSHolder.createVFS(VFS.java:77)]
Using VFS adapter org.apache.ibatis.io.DefaultVFS
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.findJarForResource(DefaultVFS.java:222)]
Find JAR URL: file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.findJarForResource(DefaultVFS.java:248)]
Not a JAR: file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:102)]
Reader entry: Student.class
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:102)]
Reader entry: User.class
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:113)]
Listing file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.findJarForResource(DefaultVFS.java:222)]
Find JAR URL: file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo/Student.class
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.findJarForResource(DefaultVFS.java:248)]
Not a JAR: file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo/Student.class
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:102)]
Reader entry: ���� 4 Q
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.findJarForResource(DefaultVFS.java:222)]
Find JAR URL: file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo/User.class
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.findJarForResource(DefaultVFS.java:248)]
Not a JAR: file:/D:/IdeaProjects/SMS/web/WEB-INF/classes/cn/edu/ccut/bo/User.class
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.DefaultVFS.list(DefaultVFS.java:102)]
Reader entry: ���� 4 .
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.ResolverUtil.addIfMatching(ResolverUtil.java:256)]
Checking to see if class cn.edu.ccut.bo.Student matches criteria [is assignable to Object]
[DEBUG] [2018-12-09 14:55:38][org.apache.ibatis.io.ResolverUtil.addIfMatching(ResolverUtil.java:256)]
Checking to see if class cn.edu.ccut.bo.User matches criteria [is assignable to Object]
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:335)]
PooledDataSource forcefully closed/removed all connections.
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:335)]
PooledDataSource forcefully closed/removed all connections.
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:335)]
PooledDataSource forcefully closed/removed all connections.
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.datasource.pooled.PooledDataSource.forceCloseAll(PooledDataSource.java:335)]
PooledDataSource forcefully closed/removed all connections.
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.transaction.jdbc.JdbcTransaction.openConnection(JdbcTransaction.java:137)]
Opening JDBC Connection
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.datasource.pooled.PooledDataSource.popConnection(PooledDataSource.java:406)]
Created connection 1134612201.
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.transaction.jdbc.JdbcTransaction.setDesiredAutoCommit(JdbcTransaction.java:101)]
Setting autocommit to false on JDBC Connection [oracle.jdbc.driver.T4CConnection@43a0cee9]
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)]
==> Preparing: select * from users
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)]
==> Parameters:
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.logging.jdbc.BaseJdbcLogger.debug(BaseJdbcLogger.java:159)]
<== Total: 1
User{username='admin', password='admin'}
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.transaction.jdbc.JdbcTransaction.resetAutoCommit(JdbcTransaction.java:123)]
Resetting autocommit to true on JDBC Connection [oracle.jdbc.driver.T4CConnection@43a0cee9]
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.transaction.jdbc.JdbcTransaction.close(JdbcTransaction.java:91)]
Closing JDBC Connection [oracle.jdbc.driver.T4CConnection@43a0cee9]
[DEBUG] [2018-12-09 14:55:39][org.apache.ibatis.datasource.pooled.PooledDataSource.pushConnection(PooledDataSource.java:363)]
Returned connection 1134612201 to pool.
Process finished with exit code 0
可以发现,我们获取了更多的信息,通过某些信息可以很快的得知系统的运行状态