iBatis, весна, как войти в sql, который выполняется? - PullRequest
18 голосов
/ 03 ноября 2010

Я использую iBatis с пружинным каркасом. Я хочу зарегистрировать SQL, который iBatis выполняет, когда я говорю что-то вроде

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

Приведенная выше строка будет искать идентификатор emp_sql в имеющемся у меня файле ibatis sql. А затем запустите запрос, соответствующий «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>

Я все еще не могу получить 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?

Ответы [ 4 ]

20 голосов
/ 06 ноября 2010

Добавьте следующее в вашу конфигурацию 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
3 голосов
/ 22 марта 2016

Если вы используете 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 configuration, попробуйте этот эквивалент выше,

<?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 голосов
/ 05 декабря 2012

Добавьте это в свой log4j.xml

<logger name="com.ibatis" additivity="false">
    <level value="debug"/>
    <appender-ref ref="APPENDER"/>
</logger>
1 голос
/ 09 августа 2012

Добавьте это в ваш log4j

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

Это распечатает sql и результаты вывода

...