IBatis, spring, как записывать SQL-код, который выполняется?
Я использую iBatis с фреймворком spring. Я хочу записать sql, который выполняется iBatis, когда я говорю что-то вроде
Employee e = (Employee) getSqlMapClientTemplate().queryForObject("emp_sql", emp);
Вышеупомянутая строка будет искать идентификатор "emp_sql" в файле sql ibatis, который у меня есть. А затем запустите запрос, соответствующий "emp_sql". Я хочу зарегистрировать этот запрос.
У меня есть следующий файл свойств файла 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>
Я все еще не могу получить sql, который выполнил ibatis.
Что-то не так с конфигурацией?
Должен ли я просто сказать
<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?
Ответы
Ответ 1
Добавьте следующую конфигурацию log4j (раскомментируйте, что вы хотите видеть).
# 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
Ответ 2
Добавьте это в свой log4j.xml
<logger name="com.ibatis" additivity="false">
<level value="debug"/>
<appender-ref ref="APPENDER"/>
</logger>
Ответ 3
Если вы используете Log4j как свою структуру ведения журнала, вам нужно установить mybatis для использования log4j в качестве инструмента регистрации по умолчанию. Вы можете сделать это, установив его в 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, как указано выше, и поместите его в свой путь к классам, чтобы он работал правильно.
Ответ 4
Добавьте это в свой log4j
<logger name="java.sql" additivity="false">
<level value="debug" />
<appender-ref ref="console" /> </logger>
Это будет печатать sql, а также результаты вывода