如果一个数据库操作出现了异常,我们需要排错,日志就能输出语句查询
主配置文件中,setting中logImpl 指定 MyBatis 所用日志的具体实现,未指定时将自动查找。
以下是日志类型,常用的其实就是LOG4J:
SLF4J
LOG4J
LOG4J2
JDK_LOGGING
COMMONS_LOGGING
STDOUT_LOGGING
NO_LOGGING
标准日志工厂,不需要导包就可以使用
<settings> <setting name="logImpl" value="STDOUT_LOGGING"/> </settings>
日志输出分析(只摘取了重要部分说明):
//初始化StdOutImpl类,其实就是这个STDOUT_LOGGING类 Logging initialized using ‘class org.apache.ibatis.logging.stdout.StdOutImpl‘ adapter. .... //打开JDBC连接 Opening JDBC Connection Created connection 1293680848. Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d1c00d0] //查询语句 ==> Preparing: select * from mybatis.user t where t.id = ? //输入参数等信息 ==> Parameters: 2(Integer) <== Columns: id, name, pwd <== Row: 2, RZP1, 123 <== Total: 1 User{id=2, name=‘RZP1‘, password=‘123‘} Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d1c00d0] Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@4d1c00d0] //连接放回连接池 Returned connection 1293680848 to pool.
Log4j是Apache的一个开源项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台、文件、GUI组件,甚至是套接口服务器、NT的事件记录器、UNIX/Syslog/守护进程等
可以控制每一条日志的输出格式;
通过定义每一条日志信息的级别,我们能够更加细致地控制日志的生成过程。---意思就是可以分等级输出:info/Eception/Error/Debug...
可以通过一个配置文件来灵活地进行配置,而不需要修改应用的代码。
<dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency>
#将等级为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/rzp.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.sq1.PreparedStatement=DEBUG
输出:
观察看出和STDOUT_LOGGING很类似
[org.apache.ibatis.logging.LogFactory]-Logging initialized using ‘class org.apache.ibatis.logging.log4j.Log4jImpl‘ adapter. ... [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Opening JDBC Connection [org.apache.ibatis.datasource.pooled.PooledDataSource]-Created connection 1866850137. [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Setting autocommit to false on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f45df59] [com.rzp.dao.UserMapper.getUserById]-==> Preparing: select * from mybatis.user t where t.id = ? [com.rzp.dao.UserMapper.getUserById]-==> Parameters: 2(Integer) [com.rzp.dao.UserMapper.getUserById]-<== Total: 1 User{id=2, name=‘RZP1‘, password=‘123‘} [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Resetting autocommit to true on JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f45df59] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-Closing JDBC Connection [com.mysql.cj.jdbc.ConnectionImpl@6f45df59] [org.apache.ibatis.datasource.pooled.PooledDataSource]-Returned connection 1866850137 to pool.
log4j的优点就是可以自定义输出的内容,就像System.out.println方法一样,只是能输出到日志里,更符合生产环境需求
要定义log4j日志输出,首先需要在需要输出信息的类里创建logger的静态对象
public class UserDaoTest { //静态对象 static Logger logger = Logger.getLogger(UserDaoTest.class); @Test public void testLog4j(){ //就可以当作输出到日志文件的System.out.pringln方法使用了 //三个方法其实是一样的,只是输出到日志后,前面的标识分别是info debug error,方便我们查看 logger.info("info:进入了testLog4j"); logger.debug("debug:进入了tesLog4j"); logger.error("error:进入了tesLog4j"); } ? } ?
在我们配置的目录下找到日志
观察日志:开头的[]就是我们定义的日志级别
原文:https://www.cnblogs.com/renzhongpei/p/12578461.html