<setting name="logImpl" value="SLF4J" />未能打印日志
时间: 2023-10-25 17:07:48 浏览: 56
如果您的 MyBatis 配置文件中已经配置了`<setting name="logImpl" value="SLF4J" />`,但仍然无法打印 SQL 日志,可能是因为您的项目中缺少了相应的日志框架依赖。
在使用 SLF4J 作为日志框架时,需要同时引入 SLF4J 的实现和具体的日志框架扩展。例如,如果您想使用 log4j 作为日志框架,需要引入以下两个依赖:
```xml
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>${slf4j.version}</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>${log4j.version}</version>
</dependency>
```
其中,`${slf4j.version}` 和 `${log4j.version}` 分别表示 SLF4J 和 log4j 的版本号。
请确认您的项目中已经引入了相应的日志框架依赖,如果还是无法打印 SQL 日志,请检查您的日志框架配置是否正确。
相关问题
<insert id="insertOrder" parameterType="Integer"> insert into orders(user_id, total) select user_id, sum(total) from cart where user_id = #{userId} insert into order_detail(order_id, book_id, num, total) select o.order_id, c.book_id, c.num, c.total from cart c join orders o on c.user_id = o.user_id where c.user_id = #{userId} </insert> ssm项目中的mapper如何先执行第一条insert语句后,再执行第二条
在 Mybatis 中,可以使用 `useGeneratedKeys` 属性来获取自动生成的主键值,但是它只适用于单条插入语句。对于多条插入语句,Mybatis 并没有提供类似的机制来获取自动生成的主键。
如果要先执行第一条插入语句,再执行第二条插入语句,可以使用 Mybatis 的 `SqlSession` 对象的 `commit()` 方法来手动提交事务。例如:
```
try {
sqlSession.insert("insertOrder", userId);
sqlSession.insert("insertOrderDetail", userId);
sqlSession.commit(); // 手动提交事务
} catch (Exception e) {
sqlSession.rollback(); // 出现异常时回滚事务
throw e;
}
```
在这个例子中,先执行第一条插入语句 `insertOrder`,再执行第二条插入语句 `insertOrderDetail`,最后通过 `commit()` 方法手动提交事务。如果在执行过程中出现异常,会将事务回滚到最初的状态。
需要注意的是,如果要使用手动提交事务的方式,需要将 Mybatis 的事务管理模式设置为 `MANUAL`,可以在 Mybatis 的配置文件中添加以下配置:
```
<configuration>
<settings>
<setting name="defaultExecutorType" value="REUSE"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="defaultStatementTimeout" value="25000"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="mapUnderscoreToCamelCase" value="true"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="logImpl" value="SLF4J"/>
<setting name="executorType" value="MANUAL"/> <!-- 手动提交事务 -->
</settings>
<mappers>
<!-- mapper 配置 -->
</mappers>
</configuration>
```
在这个例子中,将 `executorType` 属性设置为 `MANUAL`,表示使用手动提交事务的方式。
mybatis log 不打印sql
如果你的 MyBatis 日志不打印 SQL 语句,可以按照以下步骤进行排查:
1. 确认配置文件中是否开启了日志记录,并且日志级别设置为 DEBUG。
示例配置:
```xml
<configuration>
<settings>
<setting name="logImpl" value="LOG4J"/>
</settings>
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
</typeAliases>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
<plugins>
<plugin interceptor="org.mybatis.example.ExamplePlugin">
<property name="pluginProperty" value="100"/>
</plugin>
</plugins>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="org/mybatis/example/BlogMapper.xml"/>
</mappers>
<logging>
<logImpl>LOG4J</logImpl>
<level>DEBUG</level>
</logging>
</configuration>
```
2. 确认是否使用了正确的日志实现。
MyBatis 支持多种日志实现,如 Log4j、Log4j2、JDK Logging、Commons Logging 等。确保使用了你所设置的日志实现,并且该日志实现的配置文件中也开启了 DEBUG 级别的日志记录。
3. 确认是否使用了正确的日志记录器名称。
如果你使用的是 Log4j,那么你需要在配置文件中指定正确的日志记录器名称。例如,下面的配置文件指定了用于 MyBatis 的记录器名称:
```xml
<configuration>
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender name="STDOUT" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n"/>
</layout>
</appender>
<logger name="org.mybatis" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="STDOUT"/>
</logger>
</log4j:configuration>
</configuration>
```
4. 确认是否使用了正确的日志引入方式。
在使用 Maven 依赖管理工具时,需要确认是否将你所使用的日志实现和 MyBatis 的日志模块同时引入,例如:
```xml
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.30</version>
</dependency>
</dependencies>
```
以上是 MyBatis 日志不打印 SQL 的可能原因,你可以根据实际情况进行排查。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)