การกำหนดค่าการบันทึกไฮเบอร์เนตโดยใช้ไฟล์กำหนดค่า Log4j XML?


89

ฉันไม่พบเอกสารใด ๆ เกี่ยวกับวิธีกำหนดค่าการบันทึกของ Hibernate โดยใช้ไฟล์การกำหนดค่าสไตล์ XML สำหรับ Log4j

เป็นไปได้หรือไม่หรือฉันใช้ไฟล์คอนฟิกูเรชันสไตล์คุณสมบัติเพื่อควบคุมการบันทึกของไฮเบอร์เนต

หากใครมีข้อมูลหรือลิงค์ไปยังเอกสารก็จะขอบคุณ

แก้ไข:
เพื่อชี้แจงฉันกำลังมองหาตัวอย่างของไวยากรณ์ 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 ได้อย่างไร


nemo ypu เคยหาวิธีทำ xml ด้วยวิธีนี้หรือไม่ บางทีคุณอาจโพสต์คำตอบสำหรับคำถามของคุณถ้าคุณทำ
homaxto

homaxto ฉันทำ ฉันจะโพสต์ให้คุณฟังเมื่อฉันมีโอกาส
James McMahon

<appender-ref = "console" /> ทำเช่นนั้นล็อกไฮเบอร์เนตไปที่ catalina.out ด้วยคุณควรแสดงความคิดเห็นแท็กนี้หากคุณไม่ต้องการเห็น catalina.out เต็มไปด้วยบันทึกไฮเบอร์เนต
Enrique San Martín

คำตอบ:


162

จาก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 คุณต้องตั้งค่าระดับเป็น TRACE (หรือ ALL) เพื่อดูการบันทึกการเชื่อมโยงพารามิเตอร์ JDBC

และมีการระบุหมวดหมู่ดังนี้:

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

จะต้องวางไว้ก่อนองค์ประกอบราก


ฉันไม่แน่ใจว่า <appender-ref> กำลังทำอะไรอยู่ที่นั่นเมื่อฉันเปลี่ยนเป็น appender ใน config ของฉันดูเหมือนว่าไฮเบอร์เนตจะเข้าสู่ทั้งคอนโซลและตัวขยายไฟล์ของฉัน แปลก.
James McMahon

นี่เป็นเรื่องแปลกใน Hibernate 3.2.6 สำหรับ org.hibernate.type คุณสามารถใช้ระดับ DEBUG และบันทึกพารามิเตอร์ทั้งหมด ในโหมดไฮเบอร์เนต 3.5.6 DEBUG ไม่เพียงพอคุณต้องใส่ TRACE ซึ่ง IMHO ก็โอเค (เมื่อคุณรู้แล้ว) เนื่องจากมันบันทึกได้มากจริงๆ!
Riccardo Cossu

ชื่อชั้น refactored ใน Hibernate 4.2 org.hibernate.engine.transactionดังนั้นสำหรับการทำธุรกรรมการเข้าสู่ระบบที่คุณต้องใช้ ดู: docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…
gerrytan

คุณยังสามารถเพิ่มคนตัดไม้ใน standalone.xml ดังต่อไปนี้: <logger categoryoriy = "org.hibernate"> <level name = "DEBUG" /> </logger>
cw24

1
ควรLในตัวอย่างเช่น<Logger name="org.hibernate.SQL" level="debug" />จริงจะพิมพ์ใหญ่ ฉันได้รับข้อผิดพลาดใน Tomcat ในการเริ่มต้นเมื่อพะวงเปิด "The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'."L: ฉันยังสับสนว่าควรป้อนข้อมูลนี้ลงในไฟล์ log4j.xml ของฉันอย่างไร ฉันควรมี<logger>บล็อกแยกต่างหากสำหรับแต่ละหมวดหมู่พร้อมด้วย<level>แท็กหรือฉันจะหลีกหนีไปพร้อมกับหนึ่งสมุทรที่คุณนำเสนอได้หรือไม่
MegaMatt

25

คำตอบของLokiชี้ไปที่เอกสาร Hibernate 3 และให้ข้อมูลที่ดี แต่ฉันก็ยังไม่ได้ผลลัพธ์ตามที่คาดหวัง

การฟาดฟันอย่างแรงการโบกแขนและการวิ่งของหนูที่ตายไปแล้วก็ทำให้ชีสของฉันตกลงมา

เพราะ Hibernate 3 ใช้เข้าสู่ระบบแบบธรรมดาซุ้มสำหรับ 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 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>

0

คุณสามารถกำหนดค่าlog4jไฟล์ของคุณด้วยแท็กหมวดหมู่เช่นนี้ (ด้วยคอนโซล appender สำหรับตัวอย่าง):

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

หรือใช้ appender อื่นทำลาย additivity (ค่าเริ่มต้นของ additivity เป็นจริง)

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

และถ้าคุณไม่ต้องการที่จำศีลเข้าสู่ระบบทุกแบบสอบถามตั้งค่าคุณสมบัติจำศีลไปshow_sqlfalse

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.