1.前言

  在项目中编写Sysem.out.prinltn()的时候,是输出到控制台的,当项目发布到tomcat之后,是没有控制台的,不过可以在命令行界面还能看见,但是不容易观察一些输出结果。log4j是由apache推出的一个开源免费的日志处理的类库,不仅仅可以把内容输出到控制台,还能把内容输出到文件中。便于观察结果。

2.使用步骤

  1. 导入log4j的jar包
  2. 在src下,新建log4j.properties(路径和名称都是固定的,不允许改变。也就是说,src下的log4j.properties文件是log4j默认加载的文件路径!)

3.log4j配置文件

  1. log4j输出级别:Fatal 致命错误 --> error 错误 --> warn 警告--> info 信息 --> debug调试信息

  在log4j.properties文件的第一行中控制输出级别

### set log levels ###
log4j.rootCategory=INFO, CONSOLE

  上面的配置中,只有INFO及以上的日志才会打印出来,而debug则不会。info后面还有个console,表示将会打印到console控制台。如果还想输入到控制文件,则配置应该是

log4j.rootCategory=INFO, CONSOLE, LOGFILE

  在配置文件的第一行控制输出目的地

  这么写表示控制台和文件都输出

4.MyBatis与log4j

  mybatis全局配置文件中是通过标签去控制mybatis的全局开关的。从mybatis的api开发文档中可以看到,如下图,settings中有很多项配置

  其中最重要的一项配置是如下图

  即配置mybatis使用log4j日志!!

  下面演示如何在mybatis.xml中开启log4j:

  1. 必须保证有log4j的jar包
  2. 在src目录下必须有log4j.properties配置文件

  在mybatis.xml文件中做如下配置:

  注意settings的配置位置是在标签上面!

  在配置完之后,再配置上log4j.properties配置文件,并将文件输出等级设置为DEBUG,如下:

log4j.rootCategory=DEBUG, CONSOLE, LOGFILE

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%C %d{yyyy-MM-dd HH:mm:ss}  %m %n log4j.appender.LOGFILE=org.apache.log4j.FileAppender
log4j.appender.LOGFILE.File=log.log
log4j.appender.LOGFILE.Append=true
log4j.appender.LOGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.LOGFILE.layout.ConversionPattern=%C %d{yyyy-MM-dd HH:mm:ss}  %m %n

  如此,当使用mybatis执行sql语句,将会输出如下的调试日志:

  可以看到,上面输出的调试信息中,最重要的是红框中的3句话。

  因此,下面需要再对log4j.properties配置文件做相应配置,使得最后只输出这3行。 此时需要在log4j.properties配合文件做两件事情

  1. 将log4j.rootCategory的日志级别设置的比DEBUG高,如下:
log4j.rootCategory=ERROR, CONSOLE, LOGFILE
  1. 在log4j.rootCategory制定mapper.xml的日志级别

      Log4j中可以输出指定内容的日志(控制某个局部内容的日志级别).这句话的意思是,比如当我们只想控制PeopleMapper.xml中如下sql的日志输出

  那么此时可以在log4j.properties配置文件中,做如下配置:

  如此,也能控制当执行到PeopleMapper.xml中的selAll这个sql时,输出如下的DEBUG信息。

  但是这种配置方法存在一个弊端,就是使用范围太窄。假如说PeopleMapper.xml配置文件还有其他sql查询,如下:

  那么此时还是用上面的log4j.properties配置文件就不合适了,也需要做相应的修改才行:

  可见,log4j.properties添加了一行。

  但是,如果PeopleMapper.xml文件中的sql非常多,那么此时log4j.properties中需要添加的内容也同样非常多,因此像上面这种 方法级别 的配置是不合理的。这个时候,可以只对log4j.properties修改到 类级别

  如此,无论是调用PeopleMapper.xml中selAll还是selAll2的sql,就都可以打印出他们的debug信息了。

  但是,在实际项目中,肯定还会有其他的mapper.xml配置文件。比如FlowerMapper.xml。

  此时如果log4j.properties依然保持上述配置不变,那么当执行FlowerMapper.xml的sql时,就无法打出它的debug信息了。因此,可以将log4j.properties配置文件设置成包级别的,如下:

  如此,凡是com.susu.mapper包下的mapper.xml文件中的sql,当执行时都会打印出如下的debug信息:

5.总结

  1. 命名级别(包级别):namespace属性中除了最后一个类名以外的部分。例如namespace=”com.susu.mapper.PeopleMapper”,那么包级别则是com.susu.mapper,此时就需要在log4j.properties文件中:
  • 先在总体级别,设置日志级别为ERROR(比debug高),不输出无用信息
  • 再设置某个制定位置级别为DEBUG
  1. 类级别:就是mapper.xml中namespace属性的值
  2. 方法级别:mapper.xml中namespace属性的值 + 标签id的属性值

MyBatis与log4j的更多相关文章

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

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

  2. mybatis 配置 log4j 日志

    mybatis 配置 log4j 日志 使用Mybatis的时候,可能需要输出(主要是指sql,参数,结果)日志,查看执行的SQL语句,以便调试,查找问题. 测试Java类中需要加入代码: stati ...

  3. 配置 mybatis的 log4j.properties

    log4j.rootLogger=debug,stdout,logfile ### 把日志信息输出到控制台 ### log4j.appender.stdout=org.apache.log4j.Con ...

  4. mybatis结合log4j打印SQL日志

    mybatis结合log4j打印SQL日志 1.Maven引用jar包 默认的mybatis不能打印出SQL日志,不便于查看调试,须要结合log4jdbc-log4j2就能够完整的输入SQL的调试信息 ...

  5. Mybatis中Log4j日志的使用

    参考资料: (1). 百度百科:https://baike.baidu.com/item/log4j/480673?fr=aladdin (2). B站狂神的视频:https://www.bilibi ...

  6. mybatis配置Log4j带不出日志

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

  7. MyBatis中log4j 和 参数 和 分页和别名 功能

    1.配置全局文件,注意各个配置标签的顺序 properties?, settings?, typeAliases?, typeHandlers?, objectFactory?,   objectWr ...

  8. 用mybatis时log4j总是不记录sql语句

    log4j:WARN No appenders could be found for logger (org.apache.ibatis.logging.LogFactory).log4j:WARN ...

  9. MyBatis5——Mybatis整合log4j、延迟加载

    开启日志:Log4j (1)加入jar包 (2)在conf.xml中配置开启日志: <settings>         <!-- 开启日志,并指定要使用的具体日志为log4j -- ...

随机推荐

  1. requests第三方库

    requests第三方库 简介: requests是一个优雅而简单的Python 第三方HTTP请求库,专为人类而构建. requests的官方文档同样也非常的完善详尽,而且少见的有中文官方文档:ht ...

  2. JavaEE初学笔记之Servlet与Tomcat

    JavaEE开发,本质上就是开发一个个Servlet,然后部署到Servlet容器(如Tomcat)里运行.   1. Servlet是什么? Servlet就是一个普通的接口(Interface), ...

  3. 一目了然卷积神经网络 - An Intuitive Explanation of Convolutional Neural Networks

    An Intuitive Explanation of Convolutional Neural Networks 原文地址:https://ujjwalkarn.me/2016/08/11/intu ...

  4. MySQL 字符串分隔成行&子串统计

    利用help_topic表把字符串转换成行(分隔符号',') ),) as `id` FROM mysql.`help_topic`; 统计字符串每个子串出现次数(分隔符号',') ),) AS `s ...

  5. LeetCode刷题191218

    好多天没有更新了,今天有空,刷一道. 算法第5题 给定一个字符串 s,找到 s 中最长的回文子串.你可以假设 s 的最大长度为 1000. 示例 1: 输入: "babad"输出: ...

  6. 深入解析ReentrantReadWriteLock

    前言: 在Java的锁中很多锁都是同一时刻只允许一个线程访问,今天就来看看一个特殊的锁——读写锁.它的特殊之处就在于同一时刻可以运行多个读线程访问或者有一个写线程在访问.能够大大的提高并发性和吞吐量 ...

  7. sqlplus命令窗口执行sql脚本文件

    SQL>@file_name 例如 SQL>@monitor.sql      文件须得在当前窗口所在的目录下或者指定某个路径. SQL>@D:\monitor.sql 转载示例-- ...

  8. Oracle通过SQL语句查看table所引用的对象(View/Function/Procedure/Trigger)

    通过使用user_dependencies进行查看,如下: SELECT * FROM user_dependencies WHERE referenced_name='SFCUSN' --Table ...

  9. Cocos2d-x的坐标系统

    推荐转至此处阅读<Cocos2d-x的坐标系统> Cocos2d-x的坐标系统 一.坐标系 二.Cocos2d-x的坐标系统 1.类别 2.定义 三.屏幕坐标系 & OpenGL坐 ...

  10. RTP Payload Format for VP8 Video

    整体结构 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+ ...