source

Log4j XML 구성 파일을 사용하여 최대 절전 모드 로깅 구성?

manysource 2023. 11. 1. 22:26

Log4j XML 구성 파일을 사용하여 최대 절전 모드 로깅 구성?

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" />

NB: 대부분의 로거는 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>

루트 요소 앞에 배치해야 합니다.

로키대답은 하이버네이트 3 문서를 가리키며 좋은 정보를 제공하지만, 저는 여전히 제가 기대했던 결과를 얻지 못했습니다.

많은 때리기, 팔 흔들기, 쥐죽은 사람들이 마침내 내 치즈를 가져다 줬습니다.

Hibernate 3은 SLF4J(Simple Logging Facade for Java)를 사용하기 때문에(문서에 따라) Log4j 1.2를 사용하는 경우 log4j 구성 파일로 Hibernate 로깅을 완전히 구성하려면 slf4j-log4j12-1.5.10.jar도 필요합니다.이게 다음 사람에게 도움이 되길 바랍니다.

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> 

분명히 저는 최대 절전 모드 메시지를 보는 것을 좋아하지 않습니다 ;) -- 출력을 얻으려면 레벨을 "디버그"로 설정합니다.

답은 유용했습니다.변경 후 log4j 로그 파일에 있는 SQL 문과 표준 콘솔에 있는 SQL 문의 중복 로깅을 받았습니다.표준 콘솔에서 로깅을 제거하기 위해 persistence.xml 파일을 show_sql로 변경했습니다.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>

또는 다른 첨부자와 함께, (additivity default value는 true입니다)

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

쿼리마다 최대 절전 모드 로그를 원하지 않으면 최대 절전 모드 속성을 설정합니다.show_sql로.false.

언급URL : https://stackoverflow.com/questions/436276/configuring-hibernate-logging-using-log4j-xml-config-file