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

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 파일에서 어떻게 할 수 있는지 궁금합니다.



답변

에서 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>

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


답변

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

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

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


답변

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>

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


답변

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

<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 메시지를보고 싶지 않습니다.;)-출력을 얻기 위해 레벨을 “디버그”로 설정합니다.


답변

답변이 유용했습니다. 변경 후에는 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>


답변

다음 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.


답변