2014-10-28 3 views
1

mybatis를 통해 SQL 데이터베이스와 통신해야하는 스프링 기반 응용 프로그램에서 작업하고 있습니다. 괜찮지 만 로그 대상입니다.myBatis가 대상 파일과 수준을 제어합니다.

왜 mybatis가 잘못된 파일에 로그를 남깁니 까? 그 이유를 알아낼 수 있습니까?

### 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 내가 MyBatis로 ("org.apache.ibatis.logging.jdbc의 TRACE 수준의 행을 찾을 수

<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> 

스 니펫 :

log4j.properties : 여기 내 구성입니다. BaseJdbcLogger.trace (BaseJdbcLogger.java:145) ")를"app.log "파일에 저장하십시오.

나는 spring-core에서 commons-logging을 제외 시켰고 의존성 트리에서는 commons-logging을 볼 수 없었다. mybatis가 "app_libs.log"파일에 로깅되지 않는 이유는 무엇입니까? mybatis가 지정된 레벨을 존중하지 않는 이유는 무엇입니까?

감사합니다.

편집 한

조회됩니다 데이터베이스가 MyBatis로 발전기로 생성 된있는 코드와 생성 된 코드는 어딘가에 패키지 "our.company.basepackage"에서 살고있다.

답변

1

질문이 게시 되었기 때문에 지금까지 생각해 보지 않았습니다. 그 행동의 이유를 발견했습니다.

결정적인 제안은 "코드가 mybatis-generator로 생성되었습니다"이며 응용 프로그램의 동일한 하위 패키지에서 생성 된 것입니다. 즉, databaes를 쿼리하는 데 사용되는 * Mapper 클래스가 응용 프로그램 패키지에서 로그는 "org.apache.ibatis"의 로그가 아닌 "our.company.basepackage"의 로그로 취급됩니다.

로그 행의 "org.apache.ibatis"가 저를 오도했습니다. 모든 응용 프로그램에서 제대로 즉, 더 이상 "org.apache.ibatis"행을 작동하지 않습니다,이 두 줄 이상으로

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

:

이 작은 통찰력 후, 나는 내 log4j.properties에 다음을 추가했다. 로그.

mybatis-generator를 사용하는 다른 사람에게 유용 할 수 있기를 바랍니다.