Налаштування журналювання сплячого режиму за допомогою конфігураційного файлу Log4j XML?


89

Я не зміг знайти жодної документації про те, як налаштувати ведення журналу Hibernate за допомогою файлу конфігурації стилю XML для Log4j.

Чи можливо це взагалі, чи я використовую файл конфігурації стилю властивостей для управління веденням журналу Hibernate?

Якщо хтось має будь-яку інформацію або посилання на документацію, це буде вдячний.

EDIT:
Тільки для уточнення, я шукаю приклад фактичного синтаксису XML для управління Hibernate.

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

Відповіді:


161

З 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) 

Відформатовано для вставки у файл конфігурації XML log4j:

<!-- 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 ви повинні встановити рівень TRACE (або ALL), щоб побачити журналювання прив'язки параметрів JDBC.

І категорія вказана як така:

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

Його потрібно розмістити перед кореневим елементом.


Я не впевнений, що там робить <appender-ref>, коли я міняю його на додаток у моїй конфігурації, сплячий режим все ще здається ввійти як на консоль, так і на додаток до мого файлу. Дивно.
James McMahon

Це дивно, у Hibernate 3.2.6 для org.hibernate.type ви можете використовувати рівень DEBUG, і він реєструє всі параметри. У сплячому режимі 3.5.6 ДЕБУГ недостатньо, вам потрібно поставити TRACE, що є ІМХО гаразд (як тільки ви це знаєте), оскільки насправді багато журналів!
Ріккардо Коссу,

Ім'я класу було змінено на 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" />вбудовувати великі літери? Я отримую повідомлення про помилку в Tomcat при запуску , коли заголовної L: "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 «s відповідь вказує на документи Hibernate 3 і забезпечує хорошу інформацію, але я до сих пір не отримують результати , які я очікував.

Багато ударів, махань руками та загальних бігів миші нарешті принесли мені мій сир.

Оскільки Hibernate 3 використовує Simple Logging Facade для Java (SLF4J) (згідно з документами), якщо ви покладаєтесь на Log4j 1.2, вам також знадобиться slf4j-log4j12-1.5.10.jar, якщо ви хочете повністю налаштувати журналювання Hibernate з файл конфігурації 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> 

Очевидно, що я не люблю бачити повідомлення про сплячий режим;) - встановіть рівень "налагодження", щоб отримати вихідні дані.


3

Відповіді були корисними. Після зміни я отримав повторювані журнали операторів SQL, один у файлі журналу log4j та один на стандартній консолі. Я змінив файл persistence.xml на show_sql на false, щоб позбутися реєстрації зі стандартної консолі. Зберігання format_sql істинним також впливає на файл журналу 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>

Тож відображатиметься кожне попередження, помилка чи фатальне повідомлення від сплячого режиму, не більше того. Крім того, ваш код і код бібліотеки будуть знаходитись на інформаційному рівні (тому інформація, попередження, помилка та смертельний результат)

Щоб змінити рівень журналу бібліотеки, просто додайте категорію, наприклад, до неактивного інформаційного журналу Spring:

<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_sqlзначення false.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.