【问题标题】:How to log with MyBatis and Log4J2如何使用 MyBatis 和 Log4J2 进行日志记录
【发布时间】:2019-02-07 10:06:54
【问题描述】:

我正在尝试了解如何在 Wildfly 上使用 MyBatis、Spring MVC 和 Log4J2 进行日志记录。

我的问题是了解如何设置 MyBatis,目前它忽略了我的 Log4J2 配置,我只想使用 Java 进行设置。

org.apache.ibatis.session.Configuration 似乎是我需要的类,我找到了如何设置一些配置,比如 JdbcTypeForNull。我发现设置了 Log4J2 (setLogImpl(Log4j2Impl.class)) 但我已经这样做了

    org.apache.ibatis.logging.LogFactory.useLog4J2Logging();

我不明白为什么 MyBatis 会忽略我的 log4j2.properties 文件并说:

没有指定属性'configuration'或'configLocation',使用默认的MyBatis配置

这是我的 log4j2.properties

name=LoggingConfig
property.filename = logs
appenders = console, file

appender.console.type = Console
appender.console.name = STDOUT
appender.console.layout.type = PatternLayout
appender.console.layout.pattern = [%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} %c{1} - %msg

appender.file.type = File
appender.file.name = LOGFILE
appender.file.fileName=../LOGS/logs.log
appender.file.layout.type=PatternLayout
appender.file.layout.pattern=[%-5level] %d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %c{1} - %msg

loggers=console
logger.console.name=myPrj.database.mybatis.mappers
logger.console.level=DEBUG
logger.console.additivity=true
logger.console.appenderRef.console.ref = STDOUT
logger.console.myPrj.database.mybatis.mappers.MainMapper=TRACE

rootLogger.level = ALL
rootLogger.appenderRefs = stdout
rootLogger.appenderRef.stdout.ref = STDOUT

有什么建议吗?我发现官方文档真的很差,只有 xml 配置并且只有 log4j。

【问题讨论】:

    标签: log4j2 mybatis spring-mybatis


    【解决方案1】:

    这是 Spring+myBatis 的最佳实践之一。 https://github.com/mybatis/jpetstore-6.

    在项目内部,您可以在 "jpetstore-6-master\src\main\webapp\WEB-INF" 找到 applicationContext.xml。

    添加属性(值是配置文件所在的路径)

    <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/>

    到 mybatis-config.xml 如下。

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <property name="dataSource" ref="dataSource" />
            <property name="typeAliasesPackage" value="org.mybatis.jpetstore.domain" />
            <property name="configLocation" value="/WEB-INF/mybatis-config.xml"/>
    </bean>
    

    并在同一目录下创建文件“mybatis-config.xml”,如下所示。 写这个文件的时候要小心,内容要遵循mybatis-3-config.dtd。(尤其是元素的顺序)

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="logImpl" value="LOG4J2"/>
        </settings>
    </configuration>
    

    MyBatis 日志工厂将使用它找到的第一个日志实现(按上述顺序搜索实现) -- 参考自:[1]:http://www.mybatis.org/mybatis-3/logging.html

    因此,您无需在代码中调用此方法。

    org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
    

    我们回去吧,

    属性'configuration''configLocation'未指定,使用默认MyBatis配置

    • 配置是 mybatis-config.xml 中的元素。 --> mybatis没有配置。

    • configLocation 是 context.xml 中的属性名称。 --> 找不到配置文件的位置。

    如果运行良好,您可以在控制台输出中看到这一行。

    "Slf4jImpl" 是它实现的第一项,但它会改变

    2019-06-18 14:10:54,324 [main] DEBUG o.a.i.l.LogFactory:105 - Logging initialized using 'class org.apache.ibatis.logging.slf4j.Slf4jImpl' adapter.
    

    还有几行之后,

    2019-06-18 14:10:59,849 [main] DEBUG o.a.i.l.LogFactory:105 - Logging initialized using 'class org.apache.ibatis.logging.log4j2.Log4j2Impl' adapter.
    

    【讨论】:

      猜你喜欢
      • 2017-12-20
      • 2014-10-30
      • 2017-05-18
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多