복붙노트

[SPRING] Spring JDBC는 log4j로 SQL을 로깅하지 않습니다.

SPRING

Spring JDBC는 log4j로 SQL을 로깅하지 않습니다.

나는 스프링 스택에 가능한 스위치를 위해 스프링을 연구 중이다. 멋진 일 중 하나는 spring jdbc가 실행 된 모든 SQL을 기록 할 수있는 능력이었다. 그래서 나는 log4j에 log4j.properties 파일을 설치했다. 그리고 sql은 없다.

다음은 log4j.properties 파일입니다.

log4j.appender.stdout=org.apache.log4j.ConsoleAppe nder
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.Patt ernLayout
log4j.appender.stdout.layout.ConversionPattern=%d{ ABSOLUTE} %5p %c{1}:%L - %m%n
log4j.rootLogger=debug, stdout
log4j.category.org.springframework.jdbc.core=DEBUG

여기 스프링 jdbc를 통한 몇 가지 정말 간단한 insert sql의 출력이있다. http://pastie.org/713189

해결법

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

    1.이러한 추가 log4j 로거를 설정하십시오. 첫 번째는 스프링의 JdbcTemplate을 통과하는 SQL을 내보내고, 두 번째는 Spring이 준비된 명령문에 설정하는 매개 변수 값을 제공합니다.

    이러한 추가 log4j 로거를 설정하십시오. 첫 번째는 스프링의 JdbcTemplate을 통과하는 SQL을 내보내고, 두 번째는 Spring이 준비된 명령문에 설정하는 매개 변수 값을 제공합니다.

    <logger name="org.springframework.jdbc.core.JdbcTemplate">
      <level value="debug" />
    </logger>
    
    <logger name="org.springframework.jdbc.core.StatementCreatorUtils">
      <level value="debug" />
    </logger>
    

    분명히 이것은 JdbcTemplate을 사용하여 SQL을 직접 또는 간접적으로 실행하는 경우에만 작동합니다.

  2. ==============================

    2.응용 프로그램에서 사용중인 log4.properties가 맞습니까? 게시 한 log4j.properties를 내 로컬 시스템의 Spring 애플리케이션에 복사했고, JDBC 로깅 외에 Spring 디버그 항목이 많이 생겼다. 나는 당신의 출력물에 그런 디버그 항목을 보지 못했다.

    응용 프로그램에서 사용중인 log4.properties가 맞습니까? 게시 한 log4j.properties를 내 로컬 시스템의 Spring 애플리케이션에 복사했고, JDBC 로깅 외에 Spring 디버그 항목이 많이 생겼다. 나는 당신의 출력물에 그런 디버그 항목을 보지 못했다.

    log4j.properties에 대한 올바른 대다수의 원인은 다음과 같습니다.

  3. ==============================

    3.시험

    시험

    log4j.category.org.springframework.jdbc.core = TRACE
    

    이것은 나를 도왔다, 디버그는 충분하지 않았다. log4j-1.2.15 및 slf4j (1.6.4)와 함께 org.springframework.jdbc-3.0.6.RELEASE.jar을 사용하고 있습니다.

    SQL에 대해서만 (즉, 바인드 된 매개 변수 값에 관심이 없다면) DEBUG로 충분할 것입니다.

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

    4.내 이해 봄부터 준비된 진술을 사용할 때 정보를 인쇄합니다.

    내 이해 봄부터 준비된 진술을 사용할 때 정보를 인쇄합니다.

    Spring 포럼에서이 토론을 참조하십시오.

  5. ==============================

    5.어떻게 SQL을 실행하고 있습니까? Spring은 마술처럼 데이터베이스에 보내지는 SQL을 기록하지 않을 것이며, 적절한 채널을 거쳐야한다.

    어떻게 SQL을 실행하고 있습니까? Spring은 마술처럼 데이터베이스에 보내지는 SQL을 기록하지 않을 것이며, 적절한 채널을 거쳐야한다.

    예를 들어, JdbcTemplate을 사용하여 직접 또는 JdbcDaoSupport를 통해 SQL을 실행 한 경우에는 SQL이 일부 조작에서는 기록되지만 직접 SQL과 관련된 조작은 기록됩니다.

    Hibernate 나 prepared statement를 사용한다면, Spring은 SQL 자체를 볼 수 없기 때문에 그것을 로깅 할 수 없다.

    SQL을 실행하는 방법을 보여주는 샘플 코드를 게시했다면 많은 도움이 될 것입니다.

  6. ==============================

    6.Spring 3.0.7.RELEASE 및 log4j 1.2.17을 가정하면 다음을 통해 작업이 완료됩니다.

    Spring 3.0.7.RELEASE 및 log4j 1.2.17을 가정하면 다음을 통해 작업이 완료됩니다.

     <!-- activates query logging -->
     <category name="org.springframework.jdbc.core.JdbcTemplate">
        <level value="DEBUG"/>
     </category>
    <!-- activates parameter substitution logging -->
    <category name="org.springframework.jdbc.core.StatementCreatorUtils">
        <level value="TRACE"/>
    </category>
    

    .. 우리의 log4j.xml에.

    로 바꾸는 것도 좋습니다.

  7. from https://stackoverflow.com/questions/1792244/spring-jdbc-is-not-logging-sql-with-log4j by cc-by-sa and MIT license