2009-09-04 18 views
8

hibernate.cfg.xml फ़ाइल में कुछ गुणों को सेट करने के बावजूद मैं हाइबरनेट से कोई और कंसोल आउटपुट (डीबगिंग में सहायता के लिए) प्राप्त करने में सक्षम नहीं हूं। उदाहरण के लिए, लाइन <property name="show_sql">true</property> जोड़ना वास्तव में, कंसोल में SQL कथन दिखाता नहीं था।मैं हाइबरनेट से अधिक डीबग संदेश कैसे प्राप्त करूं?

मैंने log4j.properties फ़ाइल की सामग्री के साथ खेलने की कोशिश की है - जैसे log4j.logger.org.hibernate=debug - कोई किस्मत के साथ। मैं क्या खो रहा हूँ?


संपादित करें: हाइबरनेट-service.xml फ़ाइल की सामग्री

<server> 
    <mbean code="org.jboss.hibernate.jmx.Hibernate" 
     name="jboss.har:service=Hibernate_SMS"> 
     <attribute name="DatasourceName">java:/SMS_DS</attribute> 
     <attribute name="Dialect">org.hibernate.dialect.HSQLDialect</attribute> 
     <attribute name="SessionFactoryName">java:/hibernate/SessionFactory</attribute> 
     <attribute name="CacheProviderClass">org.hibernate.cache.HashtableCacheProvider</attribute> 
     <attribute name="ShowSqlEnabled">true</attribute> 
    </mbean> 
</server> 

हैं मैं 100% यकीन नहीं करता है, तो यह वास्तव में, किसी भी प्रभाव पड़ता है, हालांकि हूँ। वह एक्सएमएल फ़ाइल ग्रहण प्रोजेक्ट में है जो मेरी डेटाबेस सामग्री को संभालती है, लेकिन जेबॉस तैनाती निर्देशिका में प्रतीत नहीं होती है।


संपादित करें 2: यह निश्चित रूप से एक HAR के रूप में तैनात किया गया है। उस ने कहा, मुझे पूरा यकीन है कि मुझे hibernate.cfg.xml की आवश्यकता है - मुझे उस समस्या में याद आ रही है जब मैपिंग दस्तावेज़ उस फ़ाइल में प्रविष्टि के रूप में छोड़ा गया था। मुझे लगता है कि HAR चींटी का उपयोग कर से जेनरेट कर रहा है - वहाँ build.xml फ़ाइल में इसके लिए एक लक्ष्य:

<target name="har" depends="prepare" description="Builds the Hibernate HAR file"> 
    <mkdir dir="${class.root}" /> 
    <mkdir dir="${distribution.dir}" /> 

    <jar destfile="${distribution.dir}/${har.name}">      
     <!-- include the hbm.xml files --> 
     <fileset dir="${class.root}"> 
      <include name="**/*.hbm.xml"/> 
      <include name="com/[redacted]/sms/data/dto/*.class"/> 
      <include name="com/[redacted]/sms/data/dto/base/*.class"/> 
     </fileset> 

     <!-- include jboss-service.xml --> 
     <metainf dir="${hibernate.dir}"> 
      <include name="hibernate-service.xml"/> 
     </metainf> 
    </jar> 
</target> 

लेकिन जब मैं हाइबरनेट-service.xml फ़ाइल में गलत तरीके से गठित XML के साथ चींटी निर्माण करते हैं, यह असफल नहीं है अद्यतन फ़ाइल को पूरी तरह से हटाने से बिल्ड विफल होने का कारण नहीं बनता है। यहां कोई विचार है? समाप्ति अद्यतन

यह उत्पादन SQL कथन को हाइबरनेट चाहिए (यदि सब कुछ सही ढंग से सेट अप है) यह पूरी तरह से की देखभाल हो रही है की तरह लगता है - इसका मतलब यह है कि log4j.properties में सेटिंग्स एक फर्क यहाँ नहीं होगा? - क्योंकि वास्तव में चींटी चलाने पर आउटपुट को बदलता है।

संपादित करें 3: अपने डेटा har साथ अन्य अजीब समस्याओं में घिर गए के बाद, मैं हर फ़ाइल पूरी तरह से नष्ट कर दिया और har चींटी निर्माण लक्ष्य का उपयोग कर इसे फिर से बनाया। अचानक सब कुछ काम कर रहा है! उसकी भयानक मदद के लिए chessplay के लिए धन्यवाद। यह नहीं कह सकता कि मुझे पता है कि अंत में यह क्या हुआ, लेकिन मैं अपने प्रयासों को लिखने और स्वीकार करने के बजाय अपने प्रयासों को स्वीकार करता हूं; माफ करना अगर आप "वह" नहीं हैं।

+0

' hibernate.show_sql' लॉगिंग विन्यास के स्वतंत्र है; यदि सक्षम है तो यह हमेशा कंसोल के लिए एसक्यूएल प्रिंट करेगा। उचित लॉगर कॉन्फ़िगरेशन में 'org.hibernate.SQL = DEBUG' सेट करना वही होगा, लेकिन जो भी आउटपुट लॉगर के लिए कॉन्फ़िगर किया गया है। दोनों विधियां एक दूसरे से स्वतंत्र हैं (उदाहरण के लिए यदि आप दोनों सेट करते हैं तो आपको दो बार मुद्रित एसक्यूएल मिलेगा) – ChssPly76

उत्तर

10

सही संपत्ति का नाम hibernate.show_sql है और यह निश्चित रूप से काम करता है।

सुनिश्चित करें कि आपका hibernate.cfg.xml सही है और इसे उठाया जा रहा है; आपकी log4j.properties फ़ाइल के लिए भी यही है। मुझे पता है कि उन बेवकूफ सुझावों की तरह लगते हैं, लेकिन वे 98% "गायब लॉगिंग आउटपुट" समस्याओं के लिए खाते हैं।

अद्यतन: मैं टिप्पणियां जोड़ने के बजाय उत्तर अपडेट करूंगा। आपको यह सुनिश्चित करने की ज़रूरत है कि आपके hibernate-service.xml को जेबॉस द्वारा उठाया गया है। जांचने का आसान तरीका यह है कि इसमें एक वाक्यविन्यास त्रुटि जोड़ना है (जैसे किसी तत्व पर एक बंद ब्रेस को छोड़ना) और देखें कि जेबॉस फिर से शुरू होने के दौरान उड़ाता है :-) इसे har में पैक किया जाना चाहिए और अपनी बिल्ड प्रक्रिया के हिस्से के रूप में तैनात किया जाना चाहिए, इसलिए यदि आपको एहसास है कि यह जेबॉस द्वारा उठाया जा रहा है, तो यह देखने का स्थान है।मैं hibernate.cfg.xml में विरोधाभासी सेटिंग्स से छुटकारा पाउंगा (उदाहरण के लिए आप जो कुछ भी एमबीन विशेषताओं के रूप में निर्दिष्ट कर रहे हैं उसे hibernate.cfg.xml में दोहराया नहीं जाना चाहिए)। उस मामले के लिए, आपको hibernate.cfg.xml की भी आवश्यकता है? यदि HAR के रूप में तैनात किया गया है, तो आपके मैपिंग को स्वचालित रूप से स्कैन/उठाया जाना चाहिए।

+0

क्या मुझे log4j.properties में लॉग स्तर सेट करने की भी आवश्यकता है? - मुझे पहले पता चला कि मैं उन दो फाइलों की गलत प्रतियों के साथ काम कर रहा था, लेकिन यहां पूछने से पहले सही प्रतियों के साथ टूलींग पर स्विच किया गया। –

+0

hibernate.show_sql को सत्य पर सेट करना लॉगिंग कॉन्फ़िगरेशन के _irregardless_ को कंसोल करने के लिए एसक्यूएल प्रिंट करना चाहिए। वैकल्पिक रूप से, आप अपनी पसंद की लॉग फ़ाइल (जैसे आपकी लॉगिंग कॉन्फ़िगरेशन में कॉन्फ़िगर किए गए) पर निर्देशित करने के लिए DEBUG को 'org.hibernate.SQL' लॉग स्तर सेट कर सकते हैं) – ChssPly76

+0

मैंने लाइन को < सच 'लेकिन अभी भी कुछ भी नहीं। : \ –

6

मैं केवल हाइबरनेट स्टेटमेंट लॉग करने के लिए log4j.properties फ़ाइल का उपयोग करता हूं। SQL कथन के लिए, log4j.logger.org.hibernate.SQL संपत्ति डिबग करने के लिए सेट की जरूरत है, और SQL मापदंडों के लिए/लौटे मूल्यों log4j.logger.org.hibernate.type गुण सेट करने की आवश्यकता है ट्रेस पर।

### direct log messages to stdout 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender 
log4j.appender.stdout.Target=System.out 
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout 
log4j.appender.stdout.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n 

### Root logger 
log4j.rootLogger=debug, stdout 

### Main Hibernate 
log4j.logger.org.hibernate=debug 

### log just the SQL 
log4j.logger.org.hibernate.SQL=debug 

### log JDBC bind parameters 
log4j.logger.org.hibernate.type=trace 
+0

किसी भी कारण से, मेरी 'log4j.properties' फ़ाइल कंसोल आउटपुट को प्रभावित नहीं करती है जब जेबॉस वास्तव में चल रहा है। हालांकि, जब मैं अपनी चींटी बिल्ड स्क्रिप्ट चलाता हूं तो यह आउटपुट स्तर को नियंत्रित करता प्रतीत होता है। –

1

इसके अलावा, आप सही log4j-विन्यास का उपयोग कर रहे shure बनाना:

यहाँ log4j.properties फ़ाइल मैं का उपयोग करें।

जब jboss में चल रहा है (आप यह कर रहे हैं, है ना?), आप $JBOSS_HOME/server/<config>/conf/jboss-log4j.xml में log4j-logging को कॉन्फ़िगर करते हैं।

दो डिफ़ॉल्ट परिशिष्ट हैं; FILElog/server.log और CONSOLE से stdout (कभी-कभी log/console.log को पुनर्निर्देशित) लिखता है। फ़ाइल में DEBUG पर एपेंडर पर थ्रेसहोल्ड समायोजित करें या सिस्टमप्रोपर्टी jboss.server.log.threshold सेट करके (आप जिस जेबॉस का उपयोग कर रहे हैं उस पर निर्भर करता है) पर निर्भर करता है।

तुम भी एक वर्ग को जोड़कर हाइबरनेट के प्रवेश प्राथमिकता समायोजित करने के लिए की आवश्यकता होगी: (JBoss MBean में ShowSqlEnabled` या, `)

<category name="org.hibernate"> 
    <priority value="DEBUG"/> 
</category> 
संबंधित मुद्दे