it-source

Spring Boot 및 Logback을 사용하여 콘솔에 대한 휴지 상태 로깅을 피할 수 없음

criticalcode 2023. 3. 17. 21:40
반응형

Spring Boot 및 Logback을 사용하여 콘솔에 대한 휴지 상태 로깅을 피할 수 없음

Spring Boot 어플리케이션에서는 다음과 같이 로그백을 사용하여 휴지 상태의 특정 로깅을 설정했는데도 콘솔에 휴지 상태의 쿼리를 계속 표시합니다.

<appender name="HIBERNATE" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOGDIR}/hibernate.log</file>
    <encoder>
        <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
    </encoder>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>${LOGDIR}/hibernate.log.%d</fileNamePattern>
    </rollingPolicy>
</appender>

<logger name="org.hibernate" additivity="false">
    <appender-ref ref="HIBERNATE"/>
</logger>

<logger name="org.hibernate.SQL" additivity="false">
    <appender-ref ref="HIBERNATE"/>
</logger>

<logger name="org.hibernate.type.descriptor.sql" additivity="false">
    <appender-ref ref="HIBERNATE"/>
</logger>

쿼리를 포함한 휴지 상태의 로그를 파일로 보냅니다.hibernate.log다만, 콘솔에서의 쿼리는 피하고 싶습니다.이 설정에서는 이 쿼리를 실행할 필요가 있다고 생각합니다.

제가 무엇을 빠뜨리고 있나요?

를 설정하면,hibernate.show_sql로.truehibernate는 SQL 스테이트먼트를 콘솔에 출력하기만 하면 됩니다(로그하는 것과 혼동하지 않습니다).org.hibernate.SQL).SqlStatementLoggerSQL 문과 SQL 문의 로그를 기록합니다.logStatement외관:

public void logStatement(String statement, Formatter formatter) {
    if ( format ) {
        if ( logToStdout || LOG.isDebugEnabled() ) {
            statement = formatter.format( statement );
        }
    }
    LOG.debug( statement );
    if ( logToStdout ) {
        System.out.println( "Hibernate: " + statement );
    }
}

따라서 콘솔에서 쿼리를 표시하지 않으려면hibernate.show_sql로 설정함으로써false아니면 아예 없앤다든지.Spring Boot에서 이 기능을 추가해 주세요.application.properties:

spring.jpa.show-sql=false

org.hibernate의 원인이 될 수 있는 다른 설정이 있다는 것을 방금 깨달았습니다.Spring Boot JUnit 테스트에서 디버깅하는 SQL, 단,

spring.jpa.show-sql=false 

그리고.

spring.jpa.properties.hibernate.show_sql=false

...

설정했을 경우

debug=true

Spring 어플리케이션*.프로퍼티 파일!

true로 설정하면 show-sql 설정이 덮어쓰고 true로 설정됩니다.

브릿지

기본적으로 2개의 속성을 false로 설정해야 합니다.

스프링 부트를 사용하는 경우 Application.properties에서 다음과 같이 설정합니다.

spring.jpa.properties.hibernate.generate_statistics=false
spring.jpa.properties.hibernate.show_sql=false

hibernate.cfg.xml 을 사용하고 있는 경우는, 다음과 같이 설정합니다.

<property name="hibernate.generate_statistics">false</property>
<property name="show_sql">false</property>

위의 모든 것을 시도했는데도 문제가 해결되지 않는 경우 속성을 설정해 보십시오.

logging.level.org.hibernate.SQL=OFF

내 어플리케이션은 스프링 부트 어플리케이션이야

제 경우 어떤 이유에서인지 'spring.jpa'라는 부동산이 있습니다.show-sql=false'는 동작하지 않았습니다.바인딩 값을 가진 SQL이 콘솔/로그에서 쿼리를 계속 인쇄하는 것을 볼 수 있었습니다.

다음과 같이 루트 레벨을 오류로 변경하여 해결합니다.

<root level="ERROR"> <appender-ref ref="STDOUT"/> </root>

루트에서는 로그 레벨을 에러로 변경하지만, 아래와 같이 별도의 로거를 사용하여 패키지/어플리케이션 로그를 info 모드로 인쇄할 수 있습니다.

<logger name="com.application.code" level="INFO"> <appender-ref ref="FILE"/> <appender-ref ref="ERR_FILE"/> </logger>

누군가에게 도움이 될 수 있도록 여기에 놓아두죠.

감사해요.

언급URL : https://stackoverflow.com/questions/36496178/cant-avoid-hibernate-logging-sql-to-console-with-spring-boot-and-logback

반응형