2010-11-02 15 views
13

Sto usando iBatis con struttura a molla. Voglio registrare l'SQL che iBatis eseguito quando dico qualcosa comeiBatis, primavera, come registrare lo sql che viene eseguito?

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

La linea di cui sopra cercherà id "emp_sql" nel file sql ibatis che ho. E quindi eseguire la query corrispondente a "emp_sql". Voglio registrare questa query.

Ho il seguente file di proprietà xml log4j.

<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> 

Non riesco ancora a ottenere lo sql eseguito da ibatis. C'è qualcosa di sbagliato nella configurazione? Devo solo dire

<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> 

Devo usare p6spy o qualcos'altro? O c'è qualcosa che posso fare nella configurazione di log4j per ottenere i registri di iBatis sql?

+0

iBatis o MyBatis (versione 3)? – AngerClown

risposta

15

Aggiungere quanto segue alla configurazione di log4j (decommentare ciò che si desidera vedere).

 
# 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

Aggiungere questo nella vostra log4j

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

questo stampa il codice SQL, nonché i risultati di output

3

Aggiungi questo nella vostra log4j.xml

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

Se si sta utilizzando Log4j come framework di registrazione che è necessario impostare mybatis per utilizzare log4j come strumento di registrazione predefinito. È possibile farlo impostando nel mybatis-config.xml come questo,

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

Oppure, se non si utilizza mybatis-config.xml e solo annotazioni, poi si desidera utilizzare

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

prima di invocare altri metodi mybatis per impostare l'implementazione di registrazione predefinita. Read More...

Utilizzare questa configurazione nel proprio 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 

Se si utilizza log4j.xml configurazione provare questo equivalente di quanto sopra,

<?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> 

Entrambi proprietà d'uso file o file xml per configurare log4j come sopra e posizionarlo nel classpath affinché funzioni correttamente.

Problemi correlati