如何配置log4j来记录mybatis的sql语句

时间:2012-11-19 05:38:12

标签: java groovy log4j mybatis

我正在使用MyBatis3我需要一种方法将所有select,insert,update语句记录到我的log4j日志文件中。

这是我的log4j文件。请帮忙

# Root logger option
log4j.rootLogger=INFO, file, stdout

# Direct log messages to a log file
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.File=test.log
log4j.appender.file.MaxFileSize=2MB
log4j.appender.file.MaxBackupIndex=1
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

# Direct log messages to stdout
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n

2 个答案:

答案 0 :(得分:2)

您可以看到Log4J配置信息here。简而言之 - 您需要在映射器或映射器包或特定映射器方法上将Log4J loglevel设置为DEBUG或TRACE。例如。 log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE。 TRACE将打印SQL,参数和结果集,DEBUG将仅打印SQL和参数。

答案 1 :(得分:2)

我找到了一种方式,让别人也能受益

为了记录sql语句,请下载Simple Logging Facade for Java(download slf4j here

除了常规的mybatis,odbc和oracle jar之外,我的类路径中添加了以下内容

  1. 的log4j-xxxx.jar
  2. 的log4j-过SLF4J-xxxx.jar
  3. 的log4j - 轧制 - appender.jar
  4. SLF4J-API-xxxx.jar
  5. SLF-log4j12-xxxx.jar
  6. 注意:xxxx是适当的版本

    并在我的log4j中添加以下行(请参阅我的问题)

    # logger debug
    log4j.logger.test.Log4jTestMyBatis=DEBUG, convert
    log4j.appender.convert = org.apache.log4j.ConsoleAppender
    log4j.appender.convert.layout=org.apache.log4j.PatternLayout
    log4j.appender.convert.layout.ConversionPattern=[%d{HH:mm:ss}] %-5p %c{3} %x - %m%n
    # end logger debug
    
    # mybatis loggers #
    log4j.logger.com.ibatis=DEBUG, convert
    log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG, convert
    log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG, convert
    log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG, convert
    

    这是我用于测试的Groovy类示例

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.apache.ibatis.session.SqlSession;
    import org.apache.log4j.PropertyConfigurator;
    
    import com.abc.db.ConfigInfo;
    import com.abc.db.ConfigInfoExample;
    import com.abc.db.client.ConfigInfoMapper;
    import com.abc.db.init.DatabaseConnectivity;
    
    
    
    class Log4jTestMyBatis {
    
        static Logger logger = LoggerFactory.getLogger(Log4jTestMyBatis.class)
    
        static main(args) {
            PropertyConfigurator.configure(Log4jTestMyBatis.class.getResource("log4j.properties"));
    
            DatabaseConnectivity.init()
            SqlSession newABCSession = DatabaseConnectivity.getNewABCSessionFactory().openSession()
    
            ConfigInfoMapper mapper = newABCSession.getMapper(ConfigInfoMapper.class)
            ConfigInfoExample qExample = new ConfigInfoExample()
            qExample.createCriteria().andProjectIdEqualTo("0-12170")
            List<ConfigInfo> ctlist = mapper.selectByExample(qExample)
    
            logger.debug(ctlist.get(0).getCfgName())
    
            newABCSession.close()
            logger.debug("debug")
    
        }   
    
    }