2012-03-15 8 views
24

मैं जांचना चाहता हूं कि ईबीन द्वारा एसक्यूएल स्टेटमेंट जेनरेट किए गए हैं, यह पता लगाने के लिए कि मेरे Play 2.0 एप्लिकेशन में कुछ अपवाद (SQL वाक्यविन्यास से संबंधित) क्यों हो रहे हैं। क्या प्ले फ्रेमवर्क 2.0 में ईबीन द्वारा उत्पन्न SQL कथन लॉग करने का कोई तरीका है?प्ले फ्रेमवर्क 2.0 और ईबीएन एसक्यूएल लॉगिंग

प्ले 1.x में, वहाँ एक jpa.debugSQL config विकल्प है, जो अगर सही पर सेट किया, वास्तव में यह कर देगा है। क्या Play 2.0 के लिए ईबीन के लिए एक समान सेटिंग मौजूद है? documentation page about Ebean of Play 2.0 अभी भी थोड़ा दुर्लभ है।


क्या मैं अब तक की कोशिश की है:

मैं अपने नियंत्रकों में इन विधि कॉल और ग्लोबल वस्तु की onStart/onRequest तरीकों को शामिल किया है, लेकिन यह कोई असर नहीं करता है:

Ebean.getServer(null).getAdminLogging().setLogLevel(LogLevel.SQL); 
Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(Play.isDev()); 

मैं application.conf से लॉग स्तरों में बदलाव कर दिया है, लेकिन यह मदद नहीं की या तो (यहां तक ​​कि लॉग स्तर TRACE के साथ)।

उत्तर

53

क्षमा पार्टी के लिए देर से होने के लिए, लेकिन मैं विकास में इस का उपयोग करें:

db.default.logStatements=true 

logger.com.jolbox=DEBUG 

application.conf करने के लिए उन दो पंक्तियों जोड़ें और आप जाने के लिए अच्छे हैं।

यह सभी एसक्यूएल स्टेटमेंट आउटपुट करता है। आशा करता हूँ की ये काम करेगा।

+0

अच्छा, यह काम करता है! –

+0

धन्यवाद कि मेरे लिए भी काम किया! – David

4

आप निम्नलिखित बयान

Ebean.getServer(null).getAdminLogging().setDebugGeneratedSql(true); 

उदाहरण

के लिए onRequest इंटरसेप्टर एक अगली फिल्म में इस आदेश का उपयोग का उपयोग करके SQL लॉगिंग सक्षम कर सकते हैं, तो आप निश्चित रूप से फ़ाइल में इस कॉन्फ़िगर करने के लिए सक्षम हो जाएगा ebean.properties

// Tips : use Play.isDev() to log only in dev mode 
+0

धन्यवाद नीचे कोड नमूना। मैंने आपके सुझाव की कोशिश की (मैंने उपरोक्त कथन को 'ग्लोबल ऑब्जेक्ट में' ऑनस्टार्ट 'और' ऑन रिक्वेस्ट 'विधियों में जोड़ा है), लेकिन मुझे अभी भी मेरे एप्लिकेशन के लॉग में कोई SQL कथन नहीं दिख रहा है। – Tommi

+0

मैंने Play2.0 फ़ाइनल में कोशिश नहीं की है, मैं जल्द ही पुनः प्रयास करूंगा (आरसी 3 अंतिम परीक्षण)। Application.conf में या AdminLogging इंस्टेंस में लॉग स्तर बदलने का प्रयास करें। क्या आप डेटाबेस स्रोत के रूप में "डिफ़ॉल्ट" का उपयोग करते हैं? –

+0

हां, "डिफ़ॉल्ट" डेटासोर्स। Application.conf और AdminLogging इंस्टेंस में लॉग स्तर सेट करने का प्रयास किया। लॉग में कई अन्य सामान दिखाई देते हैं, लेकिन हां, कोई SQL कथन नहीं, यहां तक ​​कि लॉग स्तर 'TRACE' के साथ भी। – Tommi

0

इसके अलावा आप विधि getGeneratedSQL विधि का उपयोग करके स्पॉट पर एसक्यूएल प्राप्त कर सकते हैं।

 Query<PreventionActivity> where = find.where(
      and(
        and(
        ge("Age_FROM", age) 
        , or(le("Age_TO", age), eq("Age_TO", 0)) 
        ) 
        , or(eq("Gender_CD", genderCd), eq("Gender_CD", "*")) 
      ) 
    ); 

    List<PreventionActivity> list = where.findList(); 
    Logger.info("sql "); 
    Logger.info(where.getGeneratedSql());