MyBatis入门(四)MyBatis的Log4J支持

前言

      本章讲解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

可以发现,我们获取了更多的信息,通过某些信息可以很快的得知系统的运行状态

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值