2010-11-02 55 views
13

Estoy usando iBatis con spring framework. Quiero registrar el SQL que iBatis ejecuta cuando digo algo así comoiBatis, spring, cómo registrar el sql que se ejecuta?

Employee e = (Employee) getSqlMapClientTemplate().queryForObject("emp_sql", emp); 

La línea anterior buscará "emp_sql" id en el archivo sql ibatis que tengo. Y luego ejecute la consulta correspondiente a "emp_sql". Quiero registrar esta consulta

Tengo el siguiente archivo de propiedades log4j xml.

<appender name="sqlLogAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="file" value="/disk1/logs/sql.log"/> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.txt'"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%m %n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="LevelMin" value="DEBUG"/> 
    </filter> 
</appender> 

<logger name="log4j.logger.com.ibatis"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 


<logger name="log4j.logger.java.sql.Connection"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 

<logger name="log4j.logger.java.sql.PreparedStatement"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 

Todavía no puedo conseguir el sql que el ibatis ejecutado. ¿Hay algún problema con la configuración? Debo decir

<appender name="sqlLogAppender" class="org.apache.log4j.DailyRollingFileAppender"> 
    <param name="file" value="/disk1/logs/sql.log"/> 
    <param name="datePattern" value="'-'yyyy-MM-dd'.txt'"/> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%m %n"/> 
    </layout> 
    <filter class="org.apache.log4j.varia.LevelRangeFilter"> 
     <param name="LevelMin" value="DEBUG"/> 
    </filter> 
</appender> 

<logger name="log4j.logger.java.sql"> 
    <level value="DEBUG"/> 
    <appender-ref ref="sqlLogAppender"/> 
</logger> 

¿Tengo que usar p6spy o alguna otra cosa? ¿O hay algo que pueda hacer en la configuración de log4j para obtener los registros iBatis sql?

+0

iBatis o MyBatis (versión 3)? – AngerClown

Respuesta

15

Agregue lo siguiente a su configuración log4j (elimine lo que desea ver).

 
# SqlMap logging configuration. 
#log4j.logger.com.ibatis=DEBUG 
#log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG 
#log4j.logger.com.ibatis.common.jdbc.ScriptRunner=DEBUG 
#log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=DEBUG 
#log4j.logger.java.sql=DEBUG 
#log4j.logger.java.sql.Connection=DEBUG 
#log4j.logger.java.sql.Statement=DEBUG 
#log4j.logger.java.sql.PreparedStatement=DEBUG 
#log4j.logger.java.sql.ResultSet=DEBUG 
0

Añadir esto en su log4j

<logger name="java.sql" additivity="false"> 
    <level value="debug" /> 
    <appender-ref ref="console" /> </logger> 

Esto imprimirá el SQL, así como los resultados de salida

3

agregue esto a su log4j.xml

<logger name="com.ibatis" additivity="false"> 
    <level value="debug"/> 
    <appender-ref ref="APPENDER"/> 
</logger> 
2

Si está utilizando Log4j como su marco de trabajo de registro, necesita configurar mybatis para usar log4j como su herramienta de registro predeterminada. Usted puede hacer esto mediante el establecimiento en el SqlMapConfig.xml como este,

<setting name="logImpl" value="LOG4J"/> 

O si no está utilizando SqlMapConfig.xml y sólo anotaciones, entonces usted quiera usar

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

antes de invocar cualquier otro método mybatis para establecer la implementación de registro predeterminada. Read More...

Usar esta configuración en el log4j.properties,

# Global logging configuration 
log4j.rootLogger=INFO, stdout 

# MyBatis mapper interfaces logging configuration... 
log4j.logger.com.sample.mappers=DEBUG 

# SqlMap logging configuration. 
log4j.logger.org.mybatis.spring=DEBUG 
log4j.logger.org.apache.ibatis=DEBUG 

# Console output... 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d [%p] %c - %m%n 

Si está utilizando la configuración log4j.xml probar este equivalente de lo anterior,

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE log4j:configuration PUBLIC "-//APACHE//DTD LOG4J 1.2//EN" "log4j.dtd"> 
<log4j:configuration xmlns:log4j='http://jakarta.apache.org/log4j/'> 

    <appender name="STDOUT" class="org.apache.log4j.ConsoleAppender"> 
    <layout class="org.apache.log4j.PatternLayout"> 
     <param name="ConversionPattern" value="%d [%p] %c{1} - %m%n"/> 
    </layout> 
    </appender> 

    <logger name="org.mybatis.spring" additivity="false"> 
    <level value="debug"/> 
    <appender-ref ref="STDOUT"/> 
    </logger> 

    <logger name="com.sample.mappers"> 
    <level value="debug"/> 
    <appender-ref ref="STDOUT"/> 
    </logger> 

    <!-- Other custom 3rd party logger configs --> 

    <root> 
    <priority value ="debug" /> 
    <appender-ref ref="STDOUT" /> 
    </root> 

</log4j:configuration> 

Cualquiera de propiedades de uso archivo o archivo xml para configurar log4j como arriba y colocarlo en su classpath para que esto funcione correctamente.

Cuestiones relacionadas