web-dev-qa-db-ja.com

iBatis、春、実行されたSQLをログに記録する方法は?

Spring FrameworkでiBatisを使用しています。私が何かを言ったときにiBatisが実行するSQLをログに記録したい

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

上記の行は、私が持っているibatis sqlファイルで "emp_sql" idを探します。次に、「emp_sql」に対応するクエリを実行します。このクエリをログに記録します。

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

それでも、ibatisが実行したSQLを取得できません。設定に問題がありますか?私はただ言うべきですか

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

P6spyなどを使用する必要がありますか?または、log4j構成でiBatis sqlログを取得するためにできることはありますか?

18
aadidasu

以下をlog4j構成に追加します(表示したいもののコメントを外します)。

#SqlMapロギング構成。
#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 
20
DwB

ログフレームワークとしてLog4jを使用している場合、デフォルトのログツールとしてlog4jを使用するようにmybatisを設定する必要があります。これは、mybatis-config.xmlで次のように設定することで実行できます。

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

または、mybatis-config.xmlを使用せず、アノテーションのみを使用している場合は、

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

他のmybatisメソッドを呼び出してデフォルトのロギング実装を設定する前。 続きを読む...

この構成を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

log4j.xml設定を使用している場合は、上記と同等の設定を試してください。

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

プロパティファイルまたはxmlファイルを使用して、上記のようにlog4jを構成し、それをクラスパスに配置して、これが正しく機能するようにします。

3
Lucky

これをlog4j.xmlに追加します

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

これをlog4jに追加してください

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

これにより、SQLと出力結果が出力されます。

1
vsingh