各位大神,你们好!请教个关于打印sql语句的问题。
我想要配置log4j实现在控制台打印sql语句,现在是只有sql出错时才会打印语句出来,正确的语句没有打印出来。请问下面的配置不能实现正常sql语句的打印吗?跪求怎么配置啊。
log4j.properties:如下
log4j.rootLogger=debug, stdout
log4j.logger.org.mybatis=debug
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
然后pom文件log4j,mybatis相关依赖:
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.7</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.3.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>1.2.3</version>
</dependency>
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
根据你的描述,你希望在控制台打印出所有执行的SQL语句,而不仅仅是错误的SQL。在使用MyBatis时,通常需要配置MyBatis的日志实现为Log4j,并且确保Log4j的配置正确以捕获和输出这些日志信息。
从你提供的log4j.properties配置来看,你已经尝试配置了对org.mybatis包的debug级别日志输出,这是正确的方向。但是,对于MyBatis而言,更具体的日志配置应该是指定其内部使用的日志工厂为Log4j,并且设置相应的日志级别来确保SQL语句被记录。
首先,请确认你的MyBatis配置文件(如mybatis-config.xml)中是否指定了Log4j作为日志工厂。如果没有,你需要添加如下配置:
<configuration>
<!-- ...其他配置... -->
<settings>
<!-- 使用Log4j日志框架 -->
<setting name="logImpl" value="LOG4J"/>
</settings>
<!-- ...其他配置... -->
</configuration>
其次,你的log4j.properties配置看起来主要针对的是Java SQL API的直接使用,而不是专门针对MyBatis的。为了捕获MyBatis生成的SQL语句,你应该调整配置以专注于MyBatis的日志输出。具体来说,可以尝试以下配置:
# 设置根logger级别为DEBUG
log4j.rootLogger=DEBUG, stdout
# 配置ConsoleAppender输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
# 针对MyBatis进行配置,确保SQL语句被记录
log4j.logger.com.ibatis=DEBUG
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG
log4j.logger.org.apache.ibatis=DEBUG
log4j.logger.org.apache.ibatis.type=TRACE
这里的配置增加了对MyBatis相关包的日志级别设置,特别是org.apache.ibatis,这将帮助捕获MyBatis处理过程中的详细信息,包括SQL语句。
最后,请确保你的项目依赖中包含了上述提到的所有必要的jar包,并且它们之间的版本兼容性没有问题。如果使用Maven或Gradle管理依赖,通常不需要手动指定slf4j-log4j12,因为slf4j-api会自动寻找绑定的实现。
如果按照上述步骤操作后仍然无法正常输出SQL语句,请检查是否有其他日志框架(如Logback、JUL等)与Log4j冲突,或者检查应用运行时环境是否有覆盖日志配置的情况。