本文共 2308 字,大约阅读时间需要 7 分钟。
在编程过程中,数据库操作如果出现异常,我们需要及时排查问题。日志是排查问题的利器,但不再直接使用System.out.println
或debug
工具,而是可以通过日志实现降级处理。
MyBatis 提供了 setting
标签下的 logImpl
属性,用于指定日志工厂。不同的日志工厂实现可以满足不同的日志需求。以下是常用的日志工厂实现及其特点:
SLF4J(Simple Logging Facade for Java)是一种面向现代表象层的日志框架,适合灵活的日志配置需求。这种日志工厂在 MyBatis 3 中依然有广泛的应用。
Log4j 是 Apache 开源项目,由Fearless Computing有限公司维护。Log4j 提供了高度可定制化的日志配置能力,支持多种日志目标(如控制台、文件、GUI等),并且可以根据需求设置日志级别。
LOG4J2 是 Log4j 2.x 的全称,是对原有的 Log4j 进行了全面的改造,支持更复杂的日志配置需求,性能和稳定性也有显著提升。
JDK_LOGGING 是 MyBatis 默认的日志实现,基于 JDK 的 java.util.logging
包。
Commons Logging 是 Apache Commons 项目下的日志框架,适合需要通用日志处理的场景。
STDOUT_LOGGING 是一个简单的日志工厂实现,日志信息会被直接输出到标准输出中,不需要额外的依赖包。
NO_LOGGING 表示完全不启用任何日志输出,这在某些性能敏感场景下可能有用处,但通常不推荐于开发和调试阶段。
在 MyBatis 的核心配置文件中添加 settings
标签,具体配置如下:
在项目的 pom.xml
文件中添加 LOG4J 的依赖项:
log4j log4j 1.2.17
在项目根目录下创建 log4j.properties
文件,设置日志文件路径、输出格式等:
#rootLogger 输出到控制台和文件log4j.rootLogger=DEBUG, console, file#控制台设置log4j.appender.console=org.apache.log4j.ConsoleAppenderlog4j.appender.console.Target:System.outlog4j.appender.console.Threshold=DEBUGlog4j.appender.console.layout=org.apache.log4j.PatternLayoutlog4j.appender.console.layout.ConversionPattern=%c-%m%n#文件设置log4j.appender.file=org.apache.log4j.RollingFileAppenderlog4j.appender.file.File=./log/hj.loglog4j.appender.file.MaxFileSize=10mblog4j.appender.file.Threshold=DEBUGlog4j.appender.file.layout=org.apache.log4j.PatternLayoutlog4j.appender.file.layout.ConversionPattern=%p[%d{yy-MM-dd}][%c]%m%n#设置日志级别log4j.logger.org.mybatis=DEBUGlog4j.logger.java.sql=DEBUGlog4j.logger.java.sql.Statement=DEBUGlog4j.logger.java.sql.ResultSet=DEBUGlog4j.logger.java.sql.PreparedStatement=DEBUG
在需要使用日志的类中导入 LOG4J 的包,并初始化日志对象:
import org.apache.log4j.Logger;// 初始化日志对象public class UserMapperTest { private static final Logger logger = Logger.getLogger(UserMapperTest.class); // 测试 LOG4J 日志功能 @Test public void testLog4j() { logger.info("信息级别:进入了 testLog4j"); logger.debug("调试级别:进入了 testLog4j调试"); logger.error("错误级别:进入了 testLog4j"); }}
通过以上方法,我们可以在 MyBatis 中灵活配置不同的日志工厂,根据具体需求选择合适的日志实现工具。
转载地址:http://ycxez.baihongyu.com/