控制myBatis记录目标文件和级别

时间:2014-10-28 18:02:38

标签: java spring logging mybatis mybatis-generator

我正在开发一个基于spring的应用程序,它必须通过mybatis与SQL数据库通信:好吧,但是日志目的地。

由于某些原因mybatis登录到错误的文件,你能帮我弄清楚原因吗?这是我的配置:

log4j.properties:

### Appenders
# Console appender
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.Threshold=WARN
log4j.appender.console.layout=org.apache.log4j.PatternLayout

# Application file appender
log4j.appender.main=org.apache.log4j.RollingFileAppender
log4j.appender.main.File=logs/app.log
log4j.appender.main.layout=org.apache.log4j.PatternLayout
log4j.appender.main.MaxFileSize=10MB
log4j.appender.main.MaxBackupIndex=15

# Libs file appender
log4j.appender.libs=org.apache.log4j.RollingFileAppender
log4j.appender.libs.File=logs/app_libs.log
log4j.appender.libs.layout=org.apache.log4j.PatternLayout
log4j.appender.libs.MaxFileSize=10MB
log4j.appender.libs.MaxBackupIndex=15



### Loggers & additivity
# Application
log4j.additivity.our.company.basepackage=false
log4j.logger.our.company.basepackage=TRACE,main,console


# Root logger
log4j.rootLogger=INFO,libs

pom.xml片段

<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
    <version>1.7.5</version>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.5</version>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
    <version>1.7.5</version>
</dependency>
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
    <scope>runtime</scope>
</dependency>

我在“app.log”文件中找到了mybatis的TRACE级行(“org.apache.ibatis.logging.jdbc.BaseJdbcLogger.trace(BaseJdbcLogger.java:145)”)。

我从spring-core中排除了commons-logging,并且使用依赖树我没有看到commons-logging。为什么mybatis没有登录到文件“app_libs.log”?为什么mybatis不尊重指定的级别?

谢谢。

修改1

使用mybatis-generator生成了用于查询数据库的代码,生成的代码位于包“our.company.basepackage”下的某处。

1 个答案:

答案 0 :(得分:1)

自问题发布以来,我没有停下来思考这个问题,直到现在:我找到了这种行为的原因。

决定性的建议是&#34;代码是用mybatis-generator&#34;生成的,它是在应用程序的同一个子包中生成的:这意味着* Mapper类,用于查询数据库,实际上在应用程序包中,因此它们的日志被视为&#34; our.company.basepackage&#34;的日志。而不是&#34; org.apache.ibatis&#34;。

的日志

&#34; org.apache.ibatis&#34;在日志行中误导了我。

在这个小小的洞察力之后,我将以下内容添加到我的log4j.properties:

log4j.additivity.our.company.basepackage.persistence.mybatis=false
log4j.logger.our.company.basepackage.persistence.mybatis=INFO,libs

有了这两行,一切正常,即不再有&#34; org.apache.ibatis&#34; app.log中的行。

我希望这对其他使用mybatis-generator的人有用。