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ログを取得するためにできることはありますか?
以下を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
ログフレームワークとして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を構成し、それをクラスパスに配置して、これが正しく機能するようにします。
これを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と出力結果が出力されます。