Java Mybatis log4j如何确认log4j以将sql日志打印到文件

Java Mybatis log4j如何确认log4j以将sql日志打印到文件,java,spring,log4j,mybatis,Java,Spring,Log4j,Mybatis,我使用Spring 4和MyBatis 3,希望将log4j配置为将sql日志打印到日志文件中,例如连接、选择、插入、更新、删除、语句、preparedStatement、resultSet 我的log4j.properties如下: ### set log levels ### log4j.rootLogger=debug, stdout, log, index, D, I, W, E #log4j.rootLogger = debug,error, log, index, D, I, W,

我使用Spring 4和MyBatis 3,希望将log4j配置为将sql日志打印到日志文件中,例如连接、选择、插入、更新、删除、语句、preparedStatement、resultSet

我的log4j.properties如下:

### set log levels ###
log4j.rootLogger=debug, stdout, log, index, D, I, W, E
#log4j.rootLogger = debug,error, log, index, D, I, W, E
log4j.FilePath=${catalina.home}/app_log
###  print log to console ###
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 %p [%c] - <%m>%n

###  print log to console ###
log4j.appender.error = org.apache.log4j.ConsoleAppender
log4j.appender.error.Target = System.out
log4j.appender.error.layout = org.apache.log4j.PatternLayout
log4j.appender.error.layout.ConversionPattern = %d %p [%c] - <%m>%n

### create log to file ###
log4j.appender.log = org.apache.log4j.DailyRollingFileAppender
log4j.appender.log.File = ${log4j.FilePath}/all.log
#log4j.appender.log.MaxFileSize = 1024KB
log4j.appender.log.Encoding = UTF-8
log4j.appender.log.Append = true
log4j.appender.log.layout = org.apache.log4j.PatternLayout
log4j.appender.log.layout.ConversionPattern= %d %p [%c] - <%m>%n
log4j.additivity.com.packagename = true 


###  create log on lever debug ###
log4j.appender.D = org.apache.log4j.RollingFileAppender
log4j.appender.D.File = ${log4j.FilePath}/debug.log
log4j.appender.D.MaxFileSize = 1024KB
log4j.appender.D.Encoding = UTF-8
log4j.appender.D.Threshold = DEBUG
log4j.appender.D.layout = org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern= %d %p [%c] - <%m>%n
log4j.appender.D.MaxBackupIndex = 10


###  create log on lever error ###
log4j.appender.E = org.apache.log4j.RollingFileAppender
log4j.appender.E.File = ${log4j.FilePath}/error.log
log4j.appender.E.MaxFileSize = 1024KB
log4j.appender.E.Encoding = UTF-8
log4j.appender.E.Threshold = ERROR
log4j.appender.E.layout = org.apache.log4j.PatternLayout
log4j.appender.E.layout.ConversionPattern= %d %p [%c] - <%m>%n
log4j.appender.E.MaxBackupIndex = 10


# If programmed properly the most messages would be at DEBUG 
# and the least at FATAL.

# Control logging for other open source packages
log4j.logger.net.sf.navigator=ERROR
log4j.logger.net.sf.acegisecurity=WARN
log4j.logger.net.sf.acegisecurity.intercept.event.LoggerListener=WARN
log4j.logger.org.apache.commons=ERROR
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=ERROR
log4j.logger.org.springframework=WARN
log4j.logger.org.apache.velocity=WARN
log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG


# SqlMap logging configuration...
log4j.logger.com.ibatis=debug,stdout,log
log4j.logger.com.ibatis.db=debug,stdout,log
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug,stdout,log
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=debug,stdout,log
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=debug,stdout,log
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=debug,stdout,log
log4j.logger.com.ibatis.common.util.StopWatch=debug,stdout,log
log4j.logger.org.apache.ibatis=debug,stdout,log
log4j.logger.org.mybatis.spring=debug,stdout,log
log4j.logger.org.mybatis.spring.SqlSessionUtils=WARN
log4j.logger.org.springframework.jdbc.datasource.DataSourceTransactionManager=debug,stdout,log

log4j.logger.org.mybatis.example=TRACE



log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug
###设置日志级别###
log4j.rootLogger=debug、stdout、log、index、D、I、W、E
#log4j.rootLogger=调试、错误、日志、索引、D、I、W、E
log4j.FilePath=${catalina.home}/app_log
###将日志打印到控制台###
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.patternalyout
log4j.appender.stdout.layout.ConversionPattern=%d%p[%c]-%n
###将日志打印到控制台###
log4j.appender.error=org.apache.log4j.ConsoleAppender
log4j.appender.error.Target=System.out
log4j.appender.error.layout=org.apache.log4j.patternalyout
log4j.appender.error.layout.ConversionPattern=%d%p[%c]-%n
###创建日志文件###
log4j.appender.log=org.apache.log4j.DailyRollingFileAppender
log4j.appender.log.File=${log4j.FilePath}/all.log
#log4j.appender.log.MaxFileSize=1024KB
log4j.appender.log.Encoding=UTF-8
log4j.appender.log.Append=true
log4j.appender.log.layout=org.apache.log4j.patternalyout
log4j.appender.log.layout.ConversionPattern=%d%p[%c]-%n
log4j.additivity.com.packagename=true
###创建登录调试###
log4j.appender.D=org.apache.log4j.RollingFileAppender
log4j.appender.D.File=${log4j.FilePath}/debug.log
log4j.appender.D.MaxFileSize=1024KB
log4j.appender.D.Encoding=UTF-8
log4j.appender.D.Threshold=DEBUG
log4j.appender.D.layout=org.apache.log4j.patternalyout
log4j.appender.D.layout.ConversionPattern=%D%p[%c]-%n
log4j.appender.D.MaxBackupIndex=10
###创建登录控制杆错误###
log4j.appender.E=org.apache.log4j.RollingFileAppender
log4j.appender.E.File=${log4j.FilePath}/error.log
log4j.appender.E.MaxFileSize=1024KB
log4j.appender.E.Encoding=UTF-8
log4j.appender.E.Threshold=错误
log4j.appender.E.layout=org.apache.log4j.patternalyout
log4j.appender.E.layout.ConversionPattern=%d%p[%c]-%n
log4j.appender.E.MaxBackupIndex=10
#如果编程正确,大多数消息将在调试时显示
#至少是致命的。
#控制其他开源软件包的日志记录
log4j.logger.net.sf.navigator=错误
log4j.logger.net.sf.acegisecurity=WARN
log4j.logger.net.sf.acegisecurity.intercept.event.LoggerListener=WARN
log4j.logger.org.apache.commons=错误
log4j.logger.org.apache.struts=WARN
log4j.logger.org.displaytag=错误
log4j.logger.org.springframework=WARN
log4j.logger.org.apache.velocity=WARN
log4j.logger.org.springframework.ws.server.MessageTracing=DEBUG
#SqlMap日志记录配置。。。
log4j.logger.com.ibatis=debug,stdout,log
log4j.logger.com.ibatis.db=debug,stdout,log
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug,stdout,log
log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=debug,stdout,log
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=debug,stdout,log
log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=debug,stdout,log
log4j.logger.com.ibatis.common.util.StopWatch=debug,stdout,log
log4j.logger.org.apache.ibatis=debug,stdout,log
log4j.logger.org.mybatis.spring=debug,stdout,log
log4j.logger.org.mybatis.spring.SqlSessionUtils=WARN
log4j.logger.org.springframework.jdbc.datasource.DataSourceTransactionManager=debug,stdout,log
log4j.logger.org.mybatis.example=TRACE
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug
log4j.logger.java.sql.ResultSet=debug

它在控制台中打印sql日志,但不将sql日志打印到日志文件(例如all.log)。有人能帮我吗?多谢各位

也许您可以查看以下详细信息:
希望它能起作用

也许您可以查看以下详细信息: 希望它能起作用

您可以参考

MyBatis通过使用内部日志工厂提供日志信息。内部日志工厂将把日志信息委托给以下日志实现之一:

SLF4J apachecommons日志 Log4j 2 Log4j JDK日志记录 选择的日志记录解决方案基于内部MyBatis日志工厂的运行时自省。MyBatis日志工厂将使用它找到的第一个日志实现(按照上面的顺序搜索实现)。如果MyBatis没有发现上述任何实现,那么日志记录将被禁用

许多环境将Commons日志作为应用程序服务器类路径的一部分提供(很好的示例包括Tomcat和WebSphere)。重要的是要知道,在这样的环境中,MyBatis将使用Commons日志作为日志实现。在像WebSphere这样的环境中,这将意味着您的Log4J配置将被忽略,因为WebSphere提供了自己专有的Commons日志实现。这可能非常令人沮丧,因为MyBatis似乎忽略了您的Log4J配置(事实上,MyBatis忽略了您的Log4J配置,因为MyBatis将在此类环境中使用Commons日志)。如果您的应用程序在类路径中包含Commons日志的环境中运行,但您更希望使用其他日志实现之一,则可以通过在
mybatis config.xml
文件中添加设置来选择不同的日志实现,如下所示:

<configuration>
  <settings>
    ...
    <setting name="logImpl" value="LOG4J"/>
    ...
  </settings>
</configuration>
如果您选择调用其中一个方法,则应在调用任何其他MyBatis方法之前执行此操作。此外,如果运行时类路径上有请求的日志实现,这些方法将只切换到该日志实现。例如,如果您尝试选择Log4J日志记录,而Log4J在运行时不可用,那么MyBatis将忽略使用Log4J的请求,并使用它的正常算法来发现日志记录实现

SLF4J、apachecommons日志、apachelog4j和JDK日志API的细节超出了本文档的范围
org.apache.ibatis.logging.LogFactory.useSlf4jLogging();
org.apache.ibatis.logging.LogFactory.useLog4JLogging();
org.apache.ibatis.logging.LogFactory.useLog4J2Logging();
org.apache.ibatis.logging.LogFactory.useJdkLogging();
org.apache.ibatis.logging.LogFactory.useCommonsLogging();
org.apache.ibatis.logging.LogFactory.useStdOutLogging();
package org.mybatis.example;
public interface BlogMapper {
  @Select("SELECT * FROM blog WHERE id = #{id}")
  Blog selectBlog(int id);
}
# Global logging configuration
log4j.rootLogger=ERROR, stdout
# MyBatis logging configuration...
log4j.logger.org.mybatis.example.BlogMapper=TRACE
# Console output...
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE
log4j.logger.org.mybatis.example=TRACE
log4j.logger.org.mybatis.example=DEBUG
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.mybatis.example.BlogMapper">
  <select id="selectBlog" resultType="Blog">
    select * from Blog where id = #{id}
  </select>
</mapper>
log4j.logger.org.mybatis.example.BlogMapper=TRACE
log4j.logger.org.mybatis.example.BlogMapper.selectBlog=TRACE