Log4j XML config फाइल का उपयोग करके हाइबरनेट लॉगिंग कॉन्फ़िगर करना?


89

मैं लॉग 4j के लिए XML स्टाइल कॉन्फ़िगरेशन फ़ाइल का उपयोग करके हाइबरनेट के लॉगिंग को कॉन्फ़िगर करने के तरीके के बारे में कोई दस्तावेज नहीं ढूंढ सका हूं।

क्या यह संभव है या क्या मुझे हाइबरनेट के लॉगिंग को नियंत्रित करने के लिए एक गुण शैली विन्यास फाइल का उपयोग करना है?

अगर किसी के पास कोई सूचना या दस्तावेज़ीकरण के लिंक हैं तो इसकी सराहना की जाएगी।

संपादित करें:
स्पष्ट करने के लिए, मैं हाइबरनेट को नियंत्रित करने के लिए वास्तविक XML सिंटैक्स का एक उदाहरण देख रहा हूं।

EDIT2:
यहाँ वही है जो मेरे XML config फाइल में है।

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

लॉगिंग ठीक काम करता है, लेकिन मैं हाइबरनेट लॉगिंग को अपने तरीके से नीचे गिराने और नियंत्रित करने का एक तरीका ढूंढ रहा हूं जो मेरे एप्लिकेशन स्तर लॉगिंग से अलग है, क्योंकि यह वर्तमान में मेरे लॉग्स को भर रहा है। मुझे ऐसा करने के लिए वरीयता फ़ाइल का उपयोग करने के उदाहरण मिले हैं, मैं बस सोच रहा था कि मैं एक्सएमएल फ़ाइल में यह कैसे कर सकता हूं।


nemo, क्या ypu को कभी पता चला कि यह xml तरीका कैसे करना है? हो सकता है कि अगर आपने किया तो आप अपने प्रश्न का उत्तर दे सकते हैं।
होमटाउन

Homaxto, मैंने किया। मैं एक बार मौका मिलने पर आपके लिए पोस्ट करूंगा।
जेम्स मैकमोहन 15

<परिशोधक रेफरी = "कंसोल" /> करता है कि हाइबरनेट लॉग गोटो भी कैटालिना.आउट करने के लिए है, आपको इस टैग पर टिप्पणी करनी चाहिए यदि आप हाइबरनेट लॉग से उत्प्रेरित नहीं देखना चाहते हैं
एनरिएन सैन मार्टिन

जवाबों:


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) 

एक 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 के रूप में आपको JDBC पैरामीटर बाइंडिंग लॉगिंग देखने के लिए TRACE (या ALL) का स्तर सेट करना होगा।

और एक श्रेणी इस प्रकार निर्दिष्ट की जाती है:

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

इसे मूल तत्व से पहले रखा जाना चाहिए।


मुझे यकीन नहीं है कि <परिचर-रेफ> वहाँ क्या कर रहा है, जब मैं इसे अपने कॉन्फ़िगरेशन में एक परिशिष्ट में बदल देता हूं, तो हाइबरनेट अभी भी कंसोल और मेरी फ़ाइल ऐपेंडर दोनों में प्रवेश करने लगता है। अजीब।
जेम्स मैकमोहन

यह अजीब है, org.hibernate.type के लिए हाइबरनेट 3.2.6 में आप DEBUG स्तर का उपयोग कर सकते हैं और यह सभी मापदंडों को लॉग करता है। हाइबरनेट में 3.5.6 DEBUG पर्याप्त नहीं है, आपको TRACE डालना है, जो IMHO ठीक है (एक बार जब आप इसे जानते हैं) क्योंकि यह वास्तव में बहुत लॉग करता है!
रिकार्डो कोसु

क्लास का नाम हाइबरनेट 4.2 पर दर्शाया गया था ताकि लेन-देन लॉगिंग के लिए आपको उपयोग करना पड़े org.hibernate.engine.transaction। देखें: docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/…
gerrytan

आप निम्न की तरह भी लॉगर्स को स्वसंपूर्ण। Xml में जोड़ सकते हैं: <logger gradoriy = "org.hibernate"> <level name = "DEBUG" /> </
logger

1
चाहिए L, उदाहरण के लिए, <Logger name="org.hibernate.SQL" level="debug" />वास्तव में कैपिटल कर दिया? मैं जब एल को बड़े अक्षरों में स्टार्टअप पर बिलाव में कोई त्रुटि मिलती है: "The content of element type 'log4j:configuration' must match '(renderer*,throwableRenderer*,appender*,plugin*,(category|logger)*,root?,(categoryFactory|loggerFactory)?)'."। मैं इस बारे में भी उलझन में हूँ कि यह वास्तव में मेरे log4j.xml फ़ाइल में कैसे इनपुट होना चाहिए। क्या मुझे टैग्स के <logger>साथ, प्रत्येक श्रेणी के लिए एक अलग ब्लॉक होना चाहिए <level>, या मैं आपके द्वारा प्रस्तुत किए गए वन-लाइनर्स से दूर हो सकता हूं?
मेगामैट

25

लोकी का जवाब हाइबरनेट 3 डॉक्स को इंगित करता है और अच्छी जानकारी प्रदान करता है, लेकिन मुझे अभी भी वह परिणाम नहीं मिल रहा है जिसकी मुझे उम्मीद थी।

बहुत थ्रेशिंग, हथियार लहराते हुए और सामान्य मृत माउस रन ने आखिरकार मुझे मेरे पनीर में उतारा।

क्योंकि Hibernate 3 जावा (SLF4J) (डॉक्स के अनुसार) के लिए सरल लॉगिंग फ़ेसडे का उपयोग कर रहा है , यदि आप Log4j 1.2 पर भरोसा कर रहे हैं , तो आपको slf4j-log4j12-1.5.10.jar की भी आवश्यकता होगी यदि आप हाइबरनेट लॉगिंग को पूरी तरह से कॉन्फ़िगर करना चाहते हैं। एक log4j विन्यास फाइल। आशा है कि यह अगले आदमी की मदद करेगा।


हाँ, आपको slf4j-log4j12-1.5.10.jar की आवश्यकता है ताकि अंतर्निहित लॉगिंग परत में मोहरा तार हो सके। यदि आप लॉगिंग लेयर के रूप में लॉग 4j का उपयोग कर रहे हैं तो कॉन्फ़िगरेशन फ़ाइल अभी भी एक लॉग 4 जे कॉन्फ़िगरेशन है।
जेम्स मैकमोहन

7

होमटॉक्स की टिप्पणी के जवाब में, अभी मेरे पास यही है।

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

उत्तर उपयोगी थे। बदलाव के बाद, मुझे एसक्यूएल स्टेटमेंट्स की डुप्लिकेट लॉगिंग मिली, एक लॉग 4 जे लॉग फाइल में और एक स्टैंडर्ड कंसोल पर। मैंने मानक कंसोल से लॉगिंग से छुटकारा पाने के लिए show_sql को झूठा कहने के लिए हठ.xml फ़ाइल को बदल दिया। 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>

इसलिए हाइबरनेट से हर चेतावनी, त्रुटि या घातक संदेश प्रदर्शित किया जाएगा, इससे ज्यादा कुछ नहीं। इसके अलावा, आपका कोड और लाइब्रेरी कोड सूचना स्तर में होगा (इसलिए जानकारी, चेतावनी, त्रुटि और घातक)

लाइब्रेरी के लॉग स्तर को बदलने के लिए, बस एक श्रेणी जोड़ें, उदाहरण के लिए, निष्क्रिय स्प्रिंग जानकारी लॉग के लिए:

<category name="org.springframework">
    <priority value="WARN" />
</category>

या किसी अन्य परिशिष्ट के साथ, व्यसनीता को तोड़ें (योगात्मक डिफ़ॉल्ट मान सत्य है)

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

और अगर आप नहीं चाहते कि हाइबरनेट हर क्वेरी को लॉग करे, तो हाइबरनेट प्रॉपर्टी show_sqlको सेट करें false

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.