최대 절전 모드 로깅 콘솔 출력 끄기


84

최대 절전 모드 3을 사용하고 있으며 모든 시작 메시지를 콘솔에 덤프하지 않도록하고 싶습니다. log4j.properties에서 stdout 줄을 주석 처리했지만 운이 없었습니다. 아래에 내 로그 파일을 붙여 넣었습니다. 또한 표준 프로젝트 구조로 이클립스를 사용하고 있으며 프로젝트 폴더의 루트와 bin 폴더 모두에 log4j.properties의 복사본이 있습니다.

### stdout에 대한 직접 로그 메시지 ###
# log4j.appender.stdout = org.apache.log4j.ConsoleAppender
# log4j.appender.stdout.Target = System.out
# log4j.appender.stdout.layout = org.apache.log4j.PatternLayout
# log4j.appender.stdout.layout.ConversionPattern = % d {ABSOLUTE} % 5p % c {1} : % L-% m % n

### hibernate.log 파일로 메시지 보내기 ###
log4j.appender.file = org.apache.log4j.FileAppender
log4j.appender.file.File = hibernate.log
log4j.appender.file.layout = org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern = % d {ABSOLUTE} % 5p % c {1} : % L-% m % n

### 로그 수준 설정-더 자세한 로깅을 위해 'info'를 'debug'로 변경합니다. ###

log4j.rootLogger = warn, stdout

# log4j.logger.org.hibernate = info
log4j.logger.org.hibernate = debug

### HQL 쿼리 파서 활동 기록
# log4j.logger.org.hibernate.hql.ast.AST = debug

### SQL 만 기록
# log4j.logger.org.hibernate.SQL = debug

### JDBC 바인드 매개 변수 기록 ###
log4j.logger.org.hibernate.type = info
# log4j.logger.org.hibernate.type = debug

### 로그 스키마 내보내기 / 업데이트 ###
log4j.logger.org.hibernate.tool.hbm2ddl = debug

### 로그 HQL 구문 분석 트리
# log4j.logger.org.hibernate.hql = debug

### 로그 캐시 활동 ###
# log4j.logger.org.hibernate.cache = debug

### 트랜잭션 활동 기록
# log4j.logger.org.hibernate.transaction = debug

### JDBC 자원 획득 기록
# log4j.logger.org.hibernate.jdbc = debug

### 연결을 추적하려면 다음 라인을 활성화하십시오. ###
DriverManagerConnectionProvider를 사용할 때 ### 누출 ###
# log4j.logger.org.hibernate.connection.DriverManagerConnectionProvider = trac5

2
Hibernate 4+는 JBOSS 로깅을 사용한다는 점을 언급 할 가치가 있습니다.
Eye

답변:


77

보다 합리적인 로깅 수준을 설정하십시오. 로깅 수준을로 설정하면 이상 수준 ( , 및 )의 info로그 이벤트 만 기록되며, 즉 로깅 이벤트는 무시됩니다.infowarnerrorfataldebug

log4j.logger.org.hibernate=info

또는 XML 버전 의 log4j 구성 파일 :

<logger name="org.hibernate">
  <level value="info"/> 
</logger>

log4j 매뉴얼 도 참조하십시오 .


1
XML 버전에서는 어떻게합니까?
James McMahon

위의 작업을 수행하여 org.hibernate의 모든 패키지에 적용 할 수 있습니다. 또는 hibernate 내의 다른 패키지에 대해 다른 수준을 원하는 경우 동일한 방식으로 해당 패키지를 지정할 수 있습니다.
Matthew Brubaker

3
이것은 논리적으로 보이지만 여전히 저에게는 작동하지 않습니다 (Spring 3.0.5, Hibernate 3.5.6, sf4j-log4j 브리지). 나는 여전히 매번 Hibernate 시작에 대해 약 100 줄의 'INFO'주석을 받는다. 따라서 이것은 모든 사람에게 작동하지 않을 수 있습니다.
Joseph Lust 2011

1
@Twisted Pear : 로깅 수준을 WARN으로 설정합니다. 그러면 INFO 메시지가 표시되지 않습니다.
Juha Syrjälä

5
이것이 적절하게 해결되지 않았기 때문에 후속 조치 : Hibernate는 여전히 4.3.0.Final에서도 하드 코딩 된 System.out.println()호출 이 많이 있습니다.
chrylis -cautiouslyoptimistic-

85

중요 공지 : 속성 (로깅 프레임 워크 구성의 일부가 아닌 최대 절전 구성의 일부입니다!)

hibernate.show_sql

로깅 프레임 워크를 우회하여 STDOUT에 대한 로깅을 직접 제어합니다 (메시지의 출력 형식이 누락되어 인식 할 수 있음). log4j와 같은 로깅 프레임 워크를 사용하는 경우 에는 아무런 이점이 없으므로 항상 해당 속성을 false로 설정 해야 합니다.

그 상황은 내가 Hibernate에 관한 벤치 마크를 작성하기 전까지는 전혀 신경 쓰지 않았기 때문에 꽤 오랫동안 나를 짜증나게했다.


2
hibernate.xml로깅 구성과는 반대로 Hibernate (즉, ) 구성 에서이 속성을 설정해야했습니다 . 포인터 주셔서 감사합니다!
JJ Zabkar

이 로깅을 사용하여 로깅 프레임 워크를 우회하지 않고 실제로 사용하는 방법이 있습니까? 기록하고 싶은 stdout에 몇 가지 예외가 전송되었습니다.
Legna

1
내 Spring 부트 프로젝트에서 나는 이것을 프로필 YML conf 파일에 추가했습니다. 하지만이 스레드에 대한 다른 게시물과 마찬가지로 작동하지 않았습니다. Hibernate 로그는 내가 지정하는 내용에 관계없이 계속 기록됩니다. Logback 구성, 응용 프로그램 yaml 파일 및 pom.xml 이외의 다른 곳에서 처리 할 수 ​​있습니까?
Alex

33

실행 중 :

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.OFF);

최대 절전 모드의 초기화가 작동하기 전에.


참고 : 위의 줄은 모든 로깅을 해제합니다 ( Level.OFF). 덜 엄격하게하려면 다음을 사용할 수 있습니다.

java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);

충분히 조용합니다. (또는 java.util.logging.Level더 많은 레벨을 위해 수업을 확인하십시오 ).


1
이것은 나를 위해 일했습니다.java.util.logging.Logger.getLogger("org.hibernate").setLevel(Level.SEVERE);
RafiAlhamd

16

이 최대 절전 (hb 구성) 소품을 false로 설정하여 최대 절전 모드의 많은 출력을 비활성화 할 수 있습니다.

hibernate.show_sql
hibernate.generate_statistics
hibernate.use_sql_comments

그러나 모든 콘솔 정보를 비활성화하려면 org.hibernateJuha와 같은 클래스의 NONE of FATAL 로거 수준을 설정해야합니다 .


통계는 생성하고 로그는 생성하지 않으려면 어떻게합니까?
markthegrea 2014

7

나는 마침내 Hibernate가 지금 slf4j 로그 파사드를 사용하고 있기 때문에 log4j에 연결하기 때문에 log4j 및 slf4j-log4j12 jar를 lib에 넣어야하며 log4j 속성이 Hibernate 로그를 제어하게됩니다.

내 pom.xml 설정은 다음과 같습니다.

    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.16</version>
    </dependency>

    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.6.4</version>
    </dependency>

실제로 -Dorg.jboss.logging.provider=slf4jVM 옵션 에 추가 하여 Hibernate가 slf4j를 명시 적으로 사용하도록 할 수 있습니다. : 나는 주제에 대한 기사를 쓴 medium.com/@scadge/how-to-enable-hibernate-logging-dc11545efd3d
Scadge

5

Hibernate:select로그에서 메시지 를 비활성화 하려면 속성을 HibernateJpaVendorAdapter다음과 같이 설정할 수 있습니다 .

<bean id="jpaVendorAdapter"
    class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
    <property name="showSql" value="false"/>
</bean> 

4

우아한 솔루션을 원하지 않는 사람들을 위해, 그 메시지를 멈추는 빠르고 더러운 방법은 나를 위해 일한 솔루션입니다 (저는 Hibernate 4.3.6 및 Eclipse를 사용하고 위에 제공된 답변이 없거나 인터넷에서 찾을 수 없습니다) 작동했습니다. log4j 구성 파일도 프로그래밍 방식으로 로깅 수준을 설정하지도 않았습니다.)

public static void main(String[] args) {
    //magical - do not touch
    @SuppressWarnings("unused")
    org.jboss.logging.Logger logger = org.jboss.logging.Logger.getLogger("org.hibernate");
    java.util.logging.Logger.getLogger("org.hibernate").setLevel(java.util.logging.Level.WARNING); //or whatever level you need

    ...
}

이 사이트 에서 다운로드 한 튜토리얼 프로그램에서 사용했습니다.


3

가장 먼저해야 할 일은 실제로 어떤 로깅 프레임 워크가 사용되는지 파악하는 것입니다.

위의 다른 작성자가 이미 많은 프레임 워크를 다루고 있습니다. Logback을 사용하는 경우이 logback.xml 을 클래스 경로 에 추가하여 문제를 해결할 수 있습니다 .

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <logger name="org.hibernate" level="WARN"/>
</configuration>

추가 정보 : Logback 수동 구성


1

"디버그"를 "정보"로 변경했는데 제대로 작동했습니다. 내가 한 일은 다음과 같습니다.

전에:

log4j.rootLogger=debug, stdout, R

후:

log4j.rootLogger=info, stdout, R 


0

콘솔에서 로거 출력을 제거하려면 이것을 시도하십시오.

ch.qos.logback.classic.LoggerContext.LoggerContext loggerContext = (LoggerContext) org.slf4j.LoggerFactory.LoggerFactory.getILoggerFactory();

loggerContext.stop();

이 명령문은 로거의 모든 콘솔 출력을 비활성화했습니다.


0

최대 절전 모드 패키지의 로거 계층 구조를 기반으로 제어 할 수있는 최대 절전 로깅의 여러 부분이 있습니다 (로거 계층 구조에 대한 자세한 내용은 여기 ).

    <!-- Log everything in hibernate -->
    <Logger name="org.hibernate" level="info" additivity="false">
      <AppenderRef ref="Console" />
    </Logger>

    <!-- Log SQL statements -->
    <Logger name="org.hibernate.SQL" level="debug" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

    <!-- Log JDBC bind parameters -->
    <Logger name="org.hibernate.type.descriptor.sql" level="trace" additivity="false">
      <AppenderRef ref="Console" />
      <AppenderRef ref="File" />
    </Logger>

위는 여기 에서 가져온 것입니다 . 입니다.

또한 show-sql:true로깅 프레임 워크 설정을 대체하므로 구성 파일에 속성이있을 수 있습니다 . 자세한 내용은 여기 에서 확인 하세요 .


0

이 두 줄을 추가하여 멈췄습니다.

log4j.logger.org.hibernate.orm.deprecation=error

log4j.logger.org.hibernate=error

Bellow는 내 log4j.properties의 모습입니다. 로그 수준을 설명하는 주석 처리 된 줄만 남깁니다.

# Root logger option
#Level/rules TRACE < DEBUG < INFO < WARN < ERROR < FATAL.
#FATAL: shows messages at a FATAL level only
#ERROR: Shows messages classified as ERROR and FATAL
#WARNING: Shows messages classified as WARNING, ERROR, and FATAL
#INFO: Shows messages classified as INFO, WARNING, ERROR, and FATAL
#DEBUG: Shows messages classified as DEBUG, INFO, WARNING, ERROR, and FATAL
#TRACE : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#ALL : Shows messages classified as TRACE,DEBUG, INFO, WARNING, ERROR, and FATAL
#OFF : No log messages display


log4j.rootLogger=INFO, file, console

log4j.logger.main=DEBUG
log4j.logger.org.hibernate.orm.deprecation=error
log4j.logger.org.hibernate=error

#######################################
# Direct log messages to a log file
log4j.appender.file.Threshold=ALL
log4j.appender.file.file=logs/MyProgram.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p %c{1} - %m%n

# set file size limit
log4j.appender.file=org.apache.log4j.RollingFileAppender
log4j.appender.file.MaxFileSize=5MB
log4j.appender.file.MaxBackupIndex=50


#############################################
# Direct log messages to System Out
log4j.appender.console.Threshold=INFO
log4j.appender.console.Target=System.out
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss} %-5p %c{1} - %m%n
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.