Как настроить log4j для Mybatis для печати моего SQL

Мой проект настроен с помощью 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 в консоли, может ли кто-нибудь мне помочь? спасибо много

Ответы

Ответ 1

Ответ Jaradinor, вероятно, будет работать. Но, я думаю, основная проблема связана с тем, как реализуется класс MyBatis LogFactory. В статическом блоке он пытается загрузить slf4j, затем записывать сообщения об ошибках, а затем log4j. Итак, если у вас есть commons-logging в вашем пути к классам, он будет использовать это. Поскольку вы используете Spring, у вас, вероятно, есть commons-logging.

Из-за таких проблем я перешел на slf4j. Используйте slf4j-log4j12 для вызова slf4j в log4j. Используйте jcl-over-slf4j для маршрутизации всех Spring (и других) общедоступных записей в slf4j (а затем в log4j). Убедитесь, что вы исключили "реальный" файл jar-commons-logging из вашего пути к классам, когда вы это сделаете, возможно, с помощью <exclude>, если вы используете Maven.

Ответ 2

Я столкнулся с аналогичной проблемой. Следующий код помог мне (я использовал его в конфигурации класса mybatis):

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

Может стать проблемой для других систем регистрации в вашем CLASSPATH.

Ответ 3

Вам нужно поместить 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, как открытое соединение, извлекаете результаты, закрываете соединения и т.д.

ура!