Saya belum dapat menemukan dokumentasi apa pun tentang cara mengkonfigurasi logging Hibernate menggunakan file konfigurasi gaya XML untuk Log4j.
Apakah ini mungkin atau apakah saya telah menggunakan file konfigurasi gaya properti untuk mengontrol logging Hibernate?
Jika ada yang memiliki informasi atau tautan ke dokumentasi, itu akan sangat dihargai.
EDIT:
Hanya untuk memperjelas, saya mencari contoh sintaks XML sebenarnya untuk mengontrol Hibernate.
EDIT2:
Inilah yang saya miliki di file konfigurasi XML saya.
<?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>
Logging berfungsi dengan baik tetapi saya mencari cara untuk mundur dan mengontrol logging hibernate dengan cara yang terpisah dari logging level aplikasi saya, karena saat ini membanjiri log saya. Saya telah menemukan contoh penggunaan file preferensi untuk melakukan ini, saya hanya bertanya-tanya bagaimana saya bisa melakukan ini dalam file XML.
Jawaban:
Dari http://docs.jboss.org/hibernate/core/3.3/reference/en/html/session-configuration.html#configuration-logging
Berikut daftar kategori logger:
Diformat untuk ditempel ke dalam file konfigurasi 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" />
NB: Sebagian besar penebang menggunakan tingkat DEBUG, namun org.hibernate.type menggunakan TRACE. Dalam versi Hibernate org.hibernate.type sebelumnya juga menggunakan DEBUG, tetapi pada Hibernate 3 Anda harus mengatur level ke TRACE (atau ALL) untuk melihat logging pengikatan parameter JDBC.
Dan kategori ditentukan seperti itu:
<logger name="org.hibernate"> <level value="ALL" /> <appender-ref ref="FILE"/> </logger>
Ini harus ditempatkan sebelum elemen root.
sumber
org.hibernate.engine.transaction
. Lihat: docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…L
in, misalnya,<Logger name="org.hibernate.SQL" level="debug" />
benar-benar dikapitalisasi? Saya mendapatkan error di Tomcat pada startup ketika memanfaatkan L:"The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'."
. Saya juga bingung tentang bagaimana seharusnya ini dimasukkan ke file log4j.xml saya. Haruskah saya memiliki<logger>
blok terpisah untuk setiap kategori, lengkap dengan<level>
tagnya, atau dapatkah saya lolos dengan satu baris yang Anda berikan?Loki 's jawaban poin ke Hibernate 3 dokumen, dan menyediakan informasi yang baik, tapi aku masih tidak mendapatkan hasil yang saya harapkan.
Banyak meronta-ronta, melambai-lambaikan tangan, dan tikus mati secara umum akhirnya memberi saya kejayaan.
Karena Hibernate 3 menggunakan Simple Logging Facade for Java (SLF4J) (sesuai dokumen), jika Anda mengandalkan Log4j 1.2 Anda juga memerlukan slf4j-log4j12-1.5.10.jar jika Anda ingin sepenuhnya mengkonfigurasi logging Hibernasi dengan file konfigurasi log4j. Semoga ini bisa membantu orang berikutnya.
sumber
Menanggapi komentar homaxto, inilah yang saya miliki sekarang.
<?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>
Bagian kuncinya
<logger name="org.hibernate"> <level value="info" /> </logger>
Semoga ini membantu.
sumber
Inilah yang saya gunakan:
<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>
Jelas, saya tidak suka melihat pesan Hibernate;) - setel level ke "debug" untuk mendapatkan hasilnya.
sumber
Jawabannya berguna. Setelah perubahan, saya mendapat pencatatan duplikat pernyataan SQL, satu di file log log4j dan satu lagi di konsol standar. Saya mengubah file persistence.xml menjadi show_sql menjadi false untuk menghilangkan logging dari konsol standar. Menjaga format_sql benar juga mempengaruhi file log log4j, jadi saya menyimpannya benar.
<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>
sumber
Anda dapat mengonfigurasi
log4j
file Anda dengan tag kategori seperti ini (dengan penambah konsol sebagai contoh):<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>
Jadi setiap peringatan, kesalahan atau pesan fatal dari hibernate akan ditampilkan, tidak lebih. Selain itu, kode dan kode perpustakaan Anda akan berada di tingkat info (jadi info, peringatan, kesalahan dan fatal)
Untuk mengubah tingkat log perpustakaan, cukup tambahkan kategori, misalnya, ke log info musim semi yang tidak aktif:
<category name="org.springframework"> <priority value="WARN" /> </category>
Atau dengan appender lain, hentikan aditivitas (nilai default aditivitas adalah benar)
<category name="org.springframework" additivity="false"> <priority value="WARN" /> <appender-ref ref="anotherAppender" /> </category>
Dan jika Anda tidak ingin hibernasi mencatat setiap kueri, setel properti hibernasi
show_sql
kefalse
.sumber