2014-10-28 42 views
1

我正在研究一個基於spring的應用程序,該應用程序必須通過mybatis與SQL數據庫進行通信:除了日誌目標之外的所有權利。控制myBatis日誌目標文件和級別

由於某種原因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> 

我找到的MyBatis(「org.apache.ibatis.logging.jdbc的痕量行。 BaseJdbcLogger.trace(BaseJdbcLogger.java:145)「)放在文件」app.log「中。

我從spring-core中排除了commons-logging,並且使用依賴關係樹,我沒有看到commons-logging。爲什麼不mybatis記錄到文件「app_libs.log」?爲什麼mybatis不尊重規定的水平?

謝謝。

編輯1

與被查詢的數據庫已經與MyBatis的發電機生成的代碼,生成的代碼存在下的包「our.company.basepackage」的地方。

回答

1

自問題發佈以來,我一直沒有停下來想想,直到現在:我找到了這種行爲的原因。

決定性的建議是「代碼已經用mybatis-generator生成」,並且它已經在應用程序的同一個子包中生成:這意味着用於查詢數據庫的* Mapper類實際上是在應用程序包中,因此它們的日誌被視爲「our.company.basepackage」的日誌,而不是「org.apache.ibatis」的日誌。

日誌行中的「org.apache.ibatis」誤導了我。

這個小見解後,我增加了以下我的log4j.properties:

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

有了這些2條線,一切工作正常,即沒有更多的「org.apache.ibatis」行中的應用程序。登錄。

我希望這對別人使用mybatis-generator是有用的。