복붙노트

[SPRING] iBatis, spring, 실행되는 SQL을 어떻게 로그합니까?

SPRING

iBatis, spring, 실행되는 SQL을 어떻게 로그합니까?

스프링 프레임 워크로 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 또는 다른 것을 사용해야합니까? 아니면 iBatis SQL 로그를 얻기 위해 log4j 구성에서 할 수있는 것이 있습니까?

해결법

  1. ==============================

    1.log4j 구성에 다음을 추가하십시오 (보고 싶은 부분의 주석 처리를 제거하십시오).

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

    2.log4j.xml에 추가하십시오.

    log4j.xml에 추가하십시오.

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

    3.Log4j를 로깅 프레임 워크로 사용하는 경우, log4j를 기본 로깅 도구로 사용하도록 mybatis를 설정해야합니다. 이 작업은 mybatis-config.xml에서 이와 같이 설정할 수 있습니다.

    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를 구성한 다음 클래스 패스에 배치하여 올바르게 작동하게하십시오.

  4. ==============================

    4.이것을 log4j에 추가하십시오.

    이것을 log4j에 추가하십시오.

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

    이렇게하면 sql과 출력 결과가 출력됩니다.

  5. from https://stackoverflow.com/questions/4082834/ibatis-spring-how-to-log-the-sql-that-is-executed by cc-by-sa and MIT license