Mybatis学习日记-day5-日志

一、学习目标

        在mybatis的学习过程中,总会遇到各种各样的错误,然而寻找错误的过程却并不是很容易。为了解SQL语句的执行情况、参数传递情况、以及执行结果等,所以可以通过日志快速定位问题所在。

二、日志,

1.介绍

        在mybatis官方文档中提到,不少应用服务器(如 Tomcat 和 WebShpere)的类路径中已经包含 Commons Logging,所以在这种配置环境下的 MyBatis 会把它作为日志工具,记住这点非常重要。这将意味着,它提供了 Commons Logging 的私有实现,你的 Log4J 配置将被忽略。但是如果你又想使用其它日志工具,你可以通过在 MyBatis 配置文件 mybatis-config.xml 里面添加一项 setting 来选择别的日志工具。例如之前博客里使用的设置:

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

        其中,value 可选的值有很多,例如:SLF4J、LOG4J、LOG4J2、JDK_LOGGING、COMMONS_LOGGING、STDOUT_LOGGING、NO_LOGGING。你也可以调用方法来使用日志工具

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 方法之前调用它,并且仅当运行时类路径中存在该日志工具时,调用与该日志工具对应的方法才会生

2.作用

MyBatis 里的日志扮演着至关重要的角色,主要作用包括但不限于以下几点

1.在开发过程中,日志能够帮助跟踪 SQL 语句的执行情况,这对于调试复杂的数据库操作问题非常有帮助。通过日志,可以清楚地看到 MyBatis 是如何与数据库进行交互的,包括何时打开和关闭数据库连接、何时发送 SQL 查询、何时处理结果集等。

2.日志可以用于监控应用的数据库性能。通过分析日志可以识别出性能瓶颈,进而优化 SQL 语句或数据库结构。在生产环境中,适当的日志记录可以帮助监控应用的健康状况,及时发现并解决潜在的性能问题。

3.当系统出现问题时,日志是诊断问题的首要工具。通过查看日志,可以快速定位问题发生的上下文和原因,进而采取有效的解决措施对于生产环境中的突发问题。

4.通过对日志的分析,可以识别出代码中的冗余或低效部分,进而进行优化和重构,提高系统性能。

3.配置

1.日志工厂

以之前的博客为例,在mybatisConfig.xml文件添加如下配置。

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

配置之前:

配置成功之后:

2.log4j

1.介绍

        Log4j是Apache的一个开源项目,它是一款功能强大的日志记录工具,广泛应用于Java开发中,用于控制日志信息的输出。Log4j主要用于记录程序运行时的信息,包括调试信息、错误信息、警告信息等,以便于开发者进行问题追踪和系统维护。

2.导包
 <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
 </dependency>

3.配置

resources目录下新建log4j.properties文件

在文件里添加:

#将等级为DEBUG的日志信息输出到console和file这两个目的地,console和file的定义在下面的代码
log4j.rootLogger=DEBUG,console,file
#控制台输出的相关设置
log4j.appender.console = org.apache.log4j.ConsoleAppender
log4j.appender.console.Target = System.out
log4j.appender.console.Threshold=DEBUG
log4j.appender.console.layout = org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=[%c]-%m%n
#文件输出的相关设置
log4j.appender.file = org.apache.log4j.RollingFileAppender
log4j.appender.file.File=./log/kuang.log
log4j.appender.file.MaxFileSize=10mb
log4j.appender.file.Threshold=DEBUG
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=[%p][%d{yy-MM-dd}][%c]%m%n
#日志输出级别
log4j.logger.org.mybatis=DEBUG
log4j.logger.java.sql=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.ResultSet=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG

4.setting

        在第三天关于mybatis配置的博客就提到了<settings></setings>

        log4j配置如下:

    <settings>
        <setting name="logImpl" value="LOG4J"/>
    </settings>
5.测试

        以之前的博客为测试案例:

@Test
    public void selectUser() {
   
        // 通过MybatisUtils工具类获取SqlSession对象,SqlSession是MyBatis的核心接口,用于执行SQL语句
        SqlSession session = MybatisUtils.getSession();
        // 通过SqlSession的getMapper方法获取UserMapper接口的代理对象,该对象用于执行与User表相关的数据库操作
        UserMapper mapper = session.getMapper(UserMapper.class);
        // 调用UserMapper接口的selectUser方法,该方法应该返回User对象的列表
        List<User> users = mapper.selectUser();
        // 遍历返回的User对象列表
        for (User user : users) {
            // 打印每个User对象的信息到控制台
            System.out.println(user);
        }
        // 关闭SqlSession,释放数据库连接资源
        session.close();
        
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值