如何做起一个网站推广,左侧导航栏网站,中国造价工程建设监理协会网站,时尚网站模板代码1、官方文档
使用配置 | MyBatis-Plus
2、日志实现
MyBatis-Plus 提供了多种日志实现#xff08;log-impl#xff09;#xff0c;用于记录 SQL 语句和相关操作#xff0c;帮助开发者进行调试和监控数据库操作。以下是一些可用的日志实现及其说明#xff1a; StdOutImpl…1、官方文档
使用配置 | MyBatis-Plus
2、日志实现
MyBatis-Plus 提供了多种日志实现log-impl用于记录 SQL 语句和相关操作帮助开发者进行调试和监控数据库操作。以下是一些可用的日志实现及其说明 StdOutImpl将日志信息输出到控制台适用于开发和测试环境。在配置文件中设置 log-impl 为 org.apache.ibatis.logging.stdout.StdOutImpl 可以开启控制台 SQL 日志打印 。 NoLoggingImpl不记录任何日志信息适用于生产环境以避免日志泄露可能的敏感信息。配置方式为设置 log-impl 为 org.apache.ibatis.logging.nologging.NoLoggingImpl 来关闭 SQL 日志打印 。 Slf4jImpl使用 SLF4J 作为日志框架可以与 Logback、Log4j2 等日志实现配合使用。配置方式为设置 log-impl 为 org.apache.ibatis.logging.slf4j.Slf4jImpl 。 JakartaCommonsLoggingImpl、Jdk14LoggingImpl、Log4jImpl 等这些是 MyBatis-Plus 支持的其他日志实现可以根据项目中使用的日志框架进行选择 。 自定义日志实现MyBatis-Plus 还允许开发者通过实现 Log 接口来扩展自定义的日志输出方式。可以使用 LogFactory 的 useCustomLogging 方法来指定自定义日志类。
此外MyBatis-Plus 通过 LogFactory 日志工厂来确定使用哪种日志实现。如果没有明确指定它会尝试使用一系列内置日志实现直到找到合适的日志类或者禁用日志功能。
在实际使用中可以根据项目需求和环境配置相应的日志实现以便于更好地监控和调试应用程序。例如可以在项目启动时通过控制台输出的提示信息来确认当前使用的日志实现方式。如果需要将 SQL 日志和参数打印到日志文件中可以考虑使用支持文件输出的日志框架如 Logback 或 Log4j2并进行相应的配置。
3、自定义日志实现推荐
创建自定义日志实现 首先我们需要创建一个实现了org.apache.ibatis.logging.Log接口的类该类会将所有原本打算以DEBUG级别记录的日志改为以INFO级别记录。
package com.ybw.config;import org.apache.ibatis.logging.Log;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;/*** mybatis日志级别改为info** author ybw* version V1.0* className InfoLevelLog* date 2024/12/2**/
public class InfoLevelLogger implements Log {private final Logger logger;public InfoLevelLogger(String clazz) {this.logger LoggerFactory.getLogger(clazz);}Overridepublic boolean isDebugEnabled() {return logger.isInfoEnabled();}Overridepublic void error(String s, Throwable e) {logger.error(s, e);}Overridepublic void error(String s) {logger.error(s);}Overridepublic void debug(String s) {// 修改这里logger.info(s);}Overridepublic void warn(String s) {logger.warn(s);}Overridepublic boolean isTraceEnabled() {// 如果需要也可以将TRACE级别的日志改为INFOreturn logger.isInfoEnabled();}Overridepublic void trace(String s) {// 修改这里logger.trace(s);}
}
注册自定义日志实现
mybatis配置
mybatis:configuration:log-impl: com.ybw.config.InfoLevelLogger
mybatis-plus配置
mybatis-plus:configuration:log-impl: com.ybw.config.InfoLevelLogger
测试验证
[INFO ] 2024-12-02 14:37:20.403 [main] org.mybatis.spring.SqlSessionUtils - Creating a new SqlSession
[INFO ] 2024-12-02 14:37:20.420 [main] org.mybatis.spring.SqlSessionUtils - SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession7a3643e3] was not registered for synchronization because synchronization is not active
[INFO ] 2024-12-02 14:37:20.517 [main] o.m.s.t.SpringManagedTransaction - JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl3e4afd10] will not be managed by Spring
[INFO ] 2024-12-02 14:37:20.528 [main] c.y.mapper.TestYearMapper.selectList - Preparing: SELECT id,receive_year FROM test_year WHERE (receive_year ?)
[INFO ] 2024-12-02 14:37:20.660 [main] c.y.mapper.TestYearMapper.selectList - Parameters: 2024(Integer)
[INFO ] 2024-12-02 14:37:20.751 [main] c.y.mapper.TestYearMapper.selectList - Columns: id, receive_year
[INFO ] 2024-12-02 14:37:20.753 [main] c.y.mapper.TestYearMapper.selectList - Row: 1, 2024-01-01
[INFO ] 2024-12-02 14:37:20.756 [main] c.y.mapper.TestYearMapper.selectList - Total: 1
[INFO ] 2024-12-02 14:37:20.762 [main] org.mybatis.spring.SqlSessionUtils - Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession7a3643e3]
[INFO ] 2024-12-02 14:37:20.923 [main] com.ybw.service.TestYearServiceTest - list:[{id:1,receiveYear:{leap:true,value:2024}}]源代码
share: 分享仓库 - Gitee.com
4、动态配置
代码实现
/*** sql打印日志* package命名为mapper方式实现** methodName: configureLoggers* return: void* author: ybw* date: 2024/7/4**/
Bean
public void configureLoggers() {LoggerContext context (LoggerContext) LoggerFactory.getILoggerFactory();SetString mapperPackages findPackagesWithMapper();if (CollectionUtils.isEmpty(mapperPackages)) {return;}mapperPackages.forEach(packageName - {// 设置packageName包的日志级别为DEBUGcontext.getLogger(packageName).setLevel(Level.DEBUG);});
}/*** 扫描包下所有mapper** methodName: findPackagesWithMapper* return: java.util.Setjava.lang.String* author: ybw* date: 2024/7/4**/
public SetString findPackagesWithMapper() {// 使用Spring的PathMatchingResourcePatternResolver来查找资源PathMatchingResourcePatternResolver resolver new PathMatchingResourcePatternResolver();MetadataReaderFactory metadataReaderFactory new CachingMetadataReaderFactory(resolver);// 示例资源路径根据实际情况调整String packageSearchPath classpath*:**/ MybatisPlusConstant.Package.BASE_PACKAGE /**/*.class;try {Resource[] resources resolver.getResources(packageSearchPath);SetString packagesWithMapper new HashSet();for (Resource resource : resources) {if (resource.isReadable()) {MetadataReader metadataReader metadataReaderFactory.getMetadataReader(resource);String packageName ClassUtils.getPackageName(metadataReader.getClassMetadata().getClassName());if (packageName.contains(MybatisPlusConstant.Package.PACKAGE_KEYWORD)) {packagesWithMapper.add(packageName);}}}return packagesWithMapper;} catch (IOException e) {log.error(findPackagesWithMapper error:, e);}return new HashSet();
}
源代码
share: 分享仓库 - Gitee.com