web-dev-qa-db-ja.com

MybatisがSQLを出力するようにlog4jを構成する方法

私のプロジェクトはSpringMVC + Mybatis + EXTJS4でセットアップされています。これは私の構成です:

# Rules reminder:
# DEBUG < INFO < WARN < ERROR < FATAL

# Global logging configuration
log4j.rootLogger=DEBUG,stdout


log4j.logger.org.Apache.ibatis=DEBUG,stdout
log4j.logger.Java.sql=DEBUG,stdout 

#log4j.additivity.com.ibatis = false
#log4j.additivity.Java.sql = false

## Console output...
log4j.appender.stdout=org.Apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.Apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p %d %C: %m%n

しかし、コンソールでSQLを出力しません。誰か助けてもらえますか?色々ありがとう

15
sence

Jaradinorの答えはおそらくうまくいくでしょう。しかし、根本的な問題は、MyBatisLogFactoryクラスの実装方法にあると思います。静的ブロックでは、slf4j、commmons-logging、log4jの順にロードしようとします。したがって、クラスパスにcommons-loggingがある場合は、それが使用されます。 Springを使用しているので、おそらくcommons-loggingがあります。

このような問題のため、私はslf4jに移動しました。使用する slf4j-log4j12slf4jがlog4jを呼び出すようにします。使用する jcl-over-slf4jすべてのSpring(およびその他の)コモンをルーティングします-loggingをslf4j(そしてlog4j)にルーティングします。これを行うときは、クラスパスから「実際の」commons-loggingjarファイルを必ず除外してください-おそらく<exclude>Mavenを使用している場合。

10
AngerClown

同様の問題が発生しました。次のコードは私を助けました(私はmybatisクラス構成でそれを使用しました):

org.Apache.ibatis.logging.LogFactory.useLog4JLogging(); 

クラスパス内の他のロギングシステムになる問題を引き起こす可能性があります。

8
Jarandinor

Slf4j-api-xxx.jar、slf4j-log4j12-xxx.jar、log4j-over-slf4j-xxx.jar、log4j-xxx.jar(xxxをバージョンに置き換えます。たとえば1.6.3)をに入れる必要があります。クラスパスとsrcパッケージに、log4j.propertiesを配置します(以下を参照)。

log4j.debug=true

log4j.rootCategory=DEBUG

## uncoment when run in production ##
#log4j.threshold=INFO

# logger error
log4j.logger.br.danilo.psc.exceptions=ERROR, psc-error
log4j.appender.psc-error = org.Apache.log4j.RollingFileAppender
log4j.appender.psc-error.File=c:\\log-psc\\error\\log-error.log
log4j.appender.psc-error.MaxFileSize=1200KB
log4j.appender.psc-error.MaxBackupIndex=40
log4j.appender.psc-error.layout=org.Apache.log4j.PatternLayout
log4j.appender.psc-error.layout.ConversionPattern=%d{dd/MM/yyyy HH:mm:ss,SSS} [%-5p] %m %n
# end logger error

# logger debug
log4j.logger.br.danilo.psc=DEBUG, psc-debug
log4j.appender.psc-debug = org.Apache.log4j.ConsoleAppender
log4j.appender.psc-debug.layout=org.Apache.log4j.PatternLayout
log4j.appender.psc-debug.layout.ConversionPattern=[%d{HH:mm:ss}] %-5p %c{3} %x - %m%n
# end logger debug

### mybatis loggers ###
log4j.logger.com.ibatis=DEBUG, psc-debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG, psc-debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG, psc-debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG, psc-debug

# sql loggers
log4j.logger.Java.sql.Connection=DEBUG, psc-debug
log4j.logger.Java.sql.Statement=DEBUG, psc-debug
log4j.logger.Java.sql.PreparedStatement=DEBUG, psc-debug
log4j.logger.Java.sql.ResultSet=DEBUG, psc-debug

この.propertiesを使用すると、接続を開く、結果をフェッチする、接続を閉じるなど、mybatisとsqlのすべてのステップをログに記録します。

乾杯!

5
danilodeveloper