开发者社区 问答 正文

log4j配置mybatis打印不出sql语句:报错

各位大神,你们好!请教个关于打印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>

 

   

 

 

展开
收起
kun坤 2020-06-07 10:39:28 1125 分享 版权
阿里云 AI 助理回答

根据你的描述,你希望在控制台打印出所有执行的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冲突,或者检查应用运行时环境是否有覆盖日志配置的情况。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答