2014-12-19 17 views
7

आप एक नियंत्रक कार्रवाई में रखते हैं:Grails मेरे अपवाद क्यों स्ट्रिप करता है?

def inner = new RuntimeException("inner") 
def middle = new Exception("middle", inner) 
def outer = new IllegalArgumentException("outer", middle) 
throw outer 

Grails 'त्रुटि डिबग पेज (और सबसे महत्वपूर्ण बात, लॉग) केवल आंतरिक अपवाद वर्ग और उसके संदेश दिखाएगा:

त्रुटि 500 : आंतरिक सर्वर त्रुटि

यूआरआई:/...
कक्षा: java.lang.RuntimeException
संदेश: भीतरी

यह समस्याग्रस्त है जब आप एक और वर्णनात्मक संदेश के साथ एक अपवाद रैप करने के लिए चुनते हैं, तो समय की सबसे यह बाहरी संदेश यह है कि इस मुद्दे को दूर करने में अधिक महत्वपूर्ण है क्योंकि।

दरअसल, नियमित रूप से जावा की तरह, उनके वर्ग का नाम, संदेश और स्टैक ट्रेस के साथ कारण श्रृंखला में सभी अपवाद होना उपयोगी होगा।

मैंने त्रुटि पृष्ठ में अपवाद को प्रिंट करने का प्रयास किया है, लेकिन त्रुटि दृश्य को कॉल करने से पहले स्ट्रिपिंग होती है।

क्या कोई कॉन्फ़िगरेशन पैरामीटर कहीं है जो इस व्यवहार को बदल सकता है?

संपादित करें: मेरे पास posted a bug और started a mailing list thread है, लेकिन अब तक मुझे कोई कामकाज नहीं मिला है, न ही Grails स्रोत कोड में यह स्थान जहां यह स्ट्रिपिंग होता है।

उत्तर

0

मुझे वह स्थान मिला जहां अपवाद छीन दिए गए हैं।

protected Exception findWrappedException(Exception e) { 
    if ((e instanceof InvokerInvocationException)||(e instanceof GrailsMVCException)) { 
     Throwable t = getRootCause(e); 
     if (t instanceof Exception) { 
      e = (Exception) t; 
     } 
    } 
    return e; 
} 
इस परीक्षण है कि मौजूदा अपवाद एक InvokerInvocationException या GrailsMVCException, जो मामला है जब यह, एक नियंत्रक के अंदर उपयोगकर्ता कोड द्वारा उठाए गए है

और फिर फेंकता है:

यह org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver.resolveException() जो निम्न विधि कॉल में है सभी बाहरी अपवादों को दूर करेंgetRootCause()

यह स्पष्ट रूप से एक बग है।

मुझे यह भी पता चला कि मूल अपवाद request."javax.servlet.error.exception"

1

this का प्रयास करें:

आप कर सकते हैं grails.full.stacktrace वीएम संपत्ति की स्थापना "सही" यानी आपके आवेदन स्टार्टअप स्क्रिप्ट के -Dgrails.full.stacktrace = true विकल्प जोड़ने के लिए पूरी तरह से अक्षम स्टैकट्रेस छानने ।

+1

नोप में पाया जा सकता है। यह स्टैकट्रैक को अधिक लंबा बनाता है, लेकिन शीर्ष संदेश अभी भी "बाहरी" के बजाय "आंतरिक" है। – Tobia

संबंधित मुद्दे