Log4j XML 구성 파일을 사용하여 Hibernate 로깅을 구성합니까?


89

Log4j 용 XML 스타일 구성 파일을 사용하여 Hibernate의 로깅을 구성하는 방법에 대한 문서를 찾을 수 없습니다.

이것이 가능합니까 아니면 Hibernate의 로깅을 제어하기 위해 속성 스타일 구성 파일을 사용합니까?

누구든지 문서에 대한 정보 또는 링크가 있으면 감사하겠습니다.

편집 :
명확히하기 위해 Hibernate를 제어하는 ​​실제 XML 구문의 예를 찾고 있습니다.

EDIT2 :
다음은 내 XML 구성 파일에있는 내용입니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="info"/>
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="Program-Name.log"/>
        <param name="MaxFileSize" value="1000KB"/>
    <!-- Keep one backup file -->
        <param name="MaxBackupIndex" value="4"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/>
        </layout>
    </appender>

    <root>
        <priority value ="debug" />
        <appender-ref ref="console" />
        <appender-ref ref="rolling-file" />
    </root>
</log4j:configuration>

로깅은 잘 작동하지만 현재 내 로그가 넘쳐나 기 때문에 애플리케이션 수준 로깅과는 별도로 최대 절전 모드 로깅을 단계적으로 제어하고 제어하는 ​​방법을 찾고 있습니다. 이 작업을 수행하기 위해 기본 설정 파일을 사용하는 예제를 찾았습니다. XML 파일에서 어떻게 할 수 있는지 궁금합니다.


nemo, ypu가 XML 방식으로이 작업을 수행하는 방법을 알아 냈나요? 그렇다면 질문에 대한 답변을 게시 할 수 있습니다.
homaxto

homaxto, 내가했다. 기회가 생기면 게시하겠습니다.
James McMahon

<appender-ref ref = "console"/>은 최대 절전 모드 로그도 catalina.out으로 이동합니다. 최대 절전 모드 로그로 가득 찬 catalina.out을 보지 않으려면이 태그를 주석 처리해야합니다
Enrique San Martín

답변:


162

에서 http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging

로거 카테고리 목록은 다음과 같습니다.

Category                    Function

org.hibernate.SQL           Log all SQL DML statements as they are executed
org.hibernate.type          Log all JDBC parameters
org.hibernate.tool.hbm2ddl  Log all SQL DDL statements as they are executed
org.hibernate.pretty        Log the state of all entities (max 20 entities) associated with the session at flush time
org.hibernate.cache         Log all second-level cache activity
org.hibernate.transaction   Log transaction related activity
org.hibernate.jdbc          Log all JDBC resource acquisition
org.hibernate.hql.ast.AST   Log HQL and SQL ASTs during query parsing
org.hibernate.secure        Log all JAAS authorization requests
org.hibernate               Log everything (a lot of information, but very useful for troubleshooting) 

log4j XML 구성 파일에 붙여 넣기위한 형식 :

<!-- Log all SQL DML statements as they are executed -->
<Logger name="org.hibernate.SQL" level="debug" />
<!-- Log all JDBC parameters -->
<Logger name="org.hibernate.type" level="debug" />
<!-- Log all SQL DDL statements as they are executed -->
<Logger name="org.hibernate.tool.hbm2ddl" level="debug" />
<!-- Log the state of all entities (max 20 entities) associated with the session at flush time -->
<Logger name="org.hibernate.pretty" level="debug" />
<!-- Log all second-level cache activity -->
<Logger name="org.hibernate.cache" level="debug" />
<!-- Log transaction related activity -->
<Logger name="org.hibernate.transaction" level="debug" />
<!-- Log all JDBC resource acquisition -->
<Logger name="org.hibernate.jdbc" level="debug" />
<!-- Log HQL and SQL ASTs during query parsing -->
<Logger name="org.hibernate.hql.ast.AST" level="debug" />
<!-- Log all JAAS authorization requests -->
<Logger name="org.hibernate.secure" level="debug" />
<!-- Log everything (a lot of information, but very useful for troubleshooting) -->
<Logger name="org.hibernate" level="debug" />

주의 : 대부분의 로거는 DEBUG 레벨을 사용하지만 org.hibernate.type은 TRACE를 사용합니다. Hibernate의 이전 버전에서는 org.hibernate.type도 DEBUG를 사용했지만, Hibernate 3에서는 JDBC 매개 변수 바인딩 로깅을보기 위해 레벨을 TRACE (또는 ALL)로 설정해야합니다.

카테고리는 다음과 같이 지정됩니다.

<logger name="org.hibernate">
    <level value="ALL" />
    <appender-ref ref="FILE"/>
</logger>

루트 요소 앞에 있어야합니다.


나는 <appender-ref>가 거기에서 무엇을하고 있는지 잘 모르겠습니다. 내 구성에서 appender로 변경할 때 hibernate는 여전히 콘솔과 파일 appender 모두에 로그하는 것처럼 보입니다. 이상한.
James McMahon

이것은 이상합니다. org.hibernate.type에 대한 Hibernate 3.2.6에서는 DEBUG 레벨을 사용할 수 있으며 모든 매개 변수를 기록합니다. 최대 절전 모드 3.5.6에서는 DEBUG만으로는 충분하지 않습니다. TRACE를 넣어야합니다. 정말 많은 로그를 기록하기 때문에 IMHO 괜찮습니다 (알고 나면).
Riccardo Cossu 2011

클래스 이름은 Hibernate 4.2에서 리팩토링되었으므로 트랜잭션 로깅을 위해 사용해야 org.hibernate.engine.transaction합니다. 참조 : docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…
gerrytan

다음과 같이 standalone.xml에 로거를 추가 할 수도 있습니다. <logger categoriy = "org.hibernate"> <level name = "DEBUG"/> </ logger>
cw24

1
해야 L에서, 예를 들어, <Logger name="org.hibernate.SQL" level="debug" />실제로 대문자로? L : 대문자로 시작할 때 Tomcat에서 오류가 발생 "The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'."합니다. 또한 이것이 실제로 내 log4j.xml 파일에 어떻게 입력되어야하는지 혼란 스럽습니다. 태그로 <logger>완성 된 각 카테고리에 대해 별도의 블록을 가져야 <level>합니까? 아니면 여러분이 제시 한 한 줄로 도망 갈 수 있습니까?
MegaMatt

25

Loki답변 은 Hibernate 3 문서를 가리키고 좋은 정보를 제공하지만 여전히 예상 한 결과를 얻지 못했습니다.

많은 때리고, 팔을 흔들고, 일반적인 죽은 쥐가 마침내 내 치즈를 얻었습니다.

최대 절전 모드 3 사용하기 때문에 자바에 대한 간단한 로깅 외관을 , (SLF4J) (워드 프로세서 당) 경우 당신의 log4j 1.2에 의존는 것 또한 필요 SLF4J-log4j12-1.5.10.jar을 당신이 원하는 경우 완전히 와 최대 절전 모드 로깅을 구성 log4j 구성 파일. 이것이 다음 사람에게 도움이되기를 바랍니다.


예, 파사드를 기본 로깅 레이어에 연결하려면 slf4j-log4j12-1.5.10.jar이 필요합니다. log4j를 로깅 계층으로 사용하는 경우 구성 파일은 여전히 ​​log4j 구성입니다.
James McMahon

7

homaxto의 의견에 대한 응답으로 이것이 내가 지금 가지고있는 것입니다.

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="console" class="org.apache.log4j.ConsoleAppender">
        <param name="Threshold" value="debug"/>
        <param name="Target" value="System.out"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} [%t] %-5p %c{1} - %m%n"/>
        </layout>
    </appender>
    <appender name="rolling-file" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="Program-Name.log"/>
        <param name="MaxFileSize" value="500KB"/>
        <param name="MaxBackupIndex" value="4"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/>
        </layout>
    </appender>

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

    <root>
        <priority value ="debug" />
        <appender-ref ref="console" />
        <appender-ref ref="rolling-file" />
    </root>
</log4j:configuration>

핵심 부분은

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

도움이 되었기를 바랍니다.


5

내가 사용하는 것은 다음과 같습니다.

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

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

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

<root>
    <priority value="info"/>
    <appender-ref ref="C1"/>
</root> 

분명히 Hibernate 메시지를보고 싶지 않습니다.;)-출력을 얻기 위해 레벨을 "디버그"로 설정합니다.


3

답변이 유용했습니다. 변경 후에는 log4j 로그 파일과 표준 콘솔에 하나씩 SQL 문에 대한 중복 로깅을 얻었습니다. 표준 콘솔에서 로깅을 제거하기 위해 persistence.xml 파일을 show_sql을 false로 변경했습니다. format_sql을 true로 유지하면 log4j 로그 파일에도 영향을 미치므로 그대로 유지했습니다.

<persistence xmlns="http://java.sun.com/xml/ns/persistence"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
        version="2.0">
    <persistence-unit name="myUnit" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbcDriver"/>
            <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:d:\temp\database\cap1000;shutdown=true"></property>
            <property name="dialect" value="org.hibernate.dialect.HSQLDialect"/>
            <property name="hibernate.show_sql" value="false"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.connection.username" value="sa"/>
            <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        </properties>
    </persistence-unit>
</persistence>

0

다음 log4j과 같은 범주 태그를 사용하여 파일을 구성 할 수 있습니다 (예 : 콘솔 어 펜더 사용).

<appender name="console" class="org.apache.log4j.ConsoleAppender">
    <layout class="org.apache.log4j.PatternLayout">
        <param name="ConversionPattern" value="%d{yy-MM-dd HH:mm:ss} %p %c - %m%n" />
    </layout>
</appender>
<category name="org.hibernate">
    <priority value="WARN" />
</category>
<root>
    <priority value="INFO" />
    <appender-ref ref="console" />
</root>

따라서 최대 절전 모드의 모든 경고, 오류 또는 치명적인 메시지가 표시됩니다. 또한 코드 및 라이브러리 코드는 정보 수준 (정보, 경고, 오류 및 치명적)에 있습니다.

라이브러리의 로그 수준을 변경하려면 예를 들어 비활성 스프링 정보 로그에 카테고리를 추가하면됩니다.

<category name="org.springframework">
    <priority value="WARN" />
</category>

또는 다른 어 펜더로 가산 성을 중단하십시오 (가산 성 기본값은 true 임).

<category name="org.springframework" additivity="false">
    <priority value="WARN" />
    <appender-ref ref="anotherAppender" />
</category>

그리고 모든 쿼리를 최대 절전 모드로 기록하지 않으려면 hibernate 속성 show_sqlfalse.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.