Nie udało mi się znaleźć żadnej dokumentacji, jak skonfigurować logowanie Hibernate za pomocą pliku konfiguracyjnego w stylu XML dla Log4j.
Czy jest to w ogóle możliwe, czy też mam użyć pliku konfiguracyjnego stylu właściwości do kontrolowania logowania Hibernate?
Będziemy wdzięczni, jeśli ktoś ma jakieś informacje lub linki do dokumentacji.
EDYCJA:
Żeby wyjaśnić, szukam przykładu rzeczywistej składni XML do sterowania Hibernacją.
EDIT2:
Oto, co mam w moim pliku konfiguracyjnym 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>
Rejestrowanie działa dobrze, ale szukam sposobu, aby zmniejszyć i kontrolować rejestrowanie hibernacji w sposób oddzielny od rejestrowania na poziomie aplikacji, ponieważ obecnie zalewa moje dzienniki. Znalazłem przykłady wykorzystania pliku preferencji, aby to zrobić, zastanawiałem się tylko, jak mogę to zrobić w pliku XML.
Odpowiedzi:
Z http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging
Oto lista kategorii rejestratorów:
Sformatowano do wklejenia do pliku konfiguracyjnego 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" />
Uwaga: Większość loggerów używa poziomu DEBUG, jednak org.hibernate.type używa TRACE. W poprzednich wersjach Hibernate org.hibernate.type również używał DEBUG, ale od Hibernate 3 musisz ustawić poziom na TRACE (lub ALL), aby zobaczyć rejestrowanie powiązań parametrów JDBC.
Kategoria jest określona jako taka:
<logger name="org.hibernate"> <level value="ALL" /> <appender-ref ref="FILE"/> </logger>
Musi być umieszczony przed elementem głównym.
źródło
org.hibernate.engine.transaction
. Zobacz: docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…L
, na przykład,<Logger name="org.hibernate.SQL" level="debug" />
faktycznie należy wpisać wielką literę? I pojawia się błąd w Tomcat na starcie, kiedy czerpanie L:"The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'."
. Jestem również zdezorientowany, jak to właściwie powinno być wprowadzone do mojego pliku log4j.xml. Czy powinienem mieć osobny<logger>
blok dla każdej kategorii, wraz z<level>
tagami, czy mogę uciec z przedstawionymi przez Ciebie jednowierszowymi?Loki jest odpowiedź wskazuje na Hibernate 3 docs i zapewnia dobre informacje, ale nie został jeszcze uzyskanie wyników się spodziewałem.
Wiele szarpnięć, wymachiwania rękami i ogólnymi biegami martwych myszy w końcu wylądowało we mnie.
Ponieważ Hibernate 3 używa Simple Logging Facade for Java (SLF4J) (zgodnie z dokumentacją), jeśli korzystasz z Log4j 1.2, będziesz również potrzebować slf4j-log4j12-1.5.10.jar, jeśli chcesz w pełni skonfigurować logowanie Hibernacji z plik konfiguracyjny log4j. Mam nadzieję, że to pomoże następnemu facetowi.
źródło
W odpowiedzi na komentarz homaxto, oto co mam teraz.
<?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>
Kluczowa część jest
<logger name="org.hibernate"> <level value="info" /> </logger>
Mam nadzieję że to pomoże.
źródło
Oto czego używam:
<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>
Oczywiście nie lubię oglądać komunikatów hibernacji;) - ustaw poziom na „debug”, aby uzyskać wynik.
źródło
Odpowiedzi były przydatne. Po zmianie otrzymałem zduplikowane logowanie instrukcji SQL, jedno w pliku log4j, a drugie na standardowej konsoli. Zmieniłem plik persistence.xml, aby powiedzieć show_sql na false, aby pozbyć się logowania ze standardowej konsoli. Zachowanie true format_sql wpływa również na plik dziennika log4j, więc zachowałem tę prawdę.
<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>
źródło
Możesz skonfigurować swój
log4j
plik z tagiem kategorii w następujący sposób (na przykład z aplikatorem konsoli):<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>
Więc każde ostrzeżenie, błąd lub krytyczny komunikat z hibernacji zostanie wyświetlony, nic więcej. Ponadto twój kod i kod biblioteki będą na poziomie informacyjnym (więc informacje, ostrzeżenia, błędy i krytyczne)
Aby zmienić poziom dziennika biblioteki, po prostu dodaj kategorię, na przykład, aby dezaktywować dziennik informacyjny sprężyny:
<category name="org.springframework"> <priority value="WARN" /> </category>
Lub z innym aplikatorem przerwij addytywność (domyślną wartością addytywności jest prawda)
<category name="org.springframework" additivity="false"> <priority value="WARN" /> <appender-ref ref="anotherAppender" /> </category>
A jeśli nie chcesz, aby hibernacja rejestrowała każde zapytanie, ustaw właściwość hibernacji
show_sql
nafalse
.źródło