मैं जावा के लिए नया हूं और मैं उस त्रुटि स्टैक ट्रेस द्वारा उपयोग किए जाने वाले स्वरूपण नियमों से परिचित नहीं हूं जब इसे फेंक दिया जाता है और बाद में मेरे वेब एप्लिकेशन के अंतिम उपयोगकर्ता को प्रदर्शित किया जाता है।जावा: त्रुटि स्टैक ट्रेस में कौन सी जानकारी हम आम तौर पर उपयोगकर्ताओं को दिखाना नहीं चाहते हैं?
ओरेकल डेटाबेस के साथ मेरा अनुभव यह है कि त्रुटि स्टैक में स्कीमा और प्रक्रिया नाम और लाइन नंबर (जैसे) की आंतरिक जानकारी होती है, जो डिबगिंग के लिए उपयोगी होती है, मैं उपयोगकर्ता को देखने से रोकना चाहता हूं।
java.sql.SQLException : ORA-20011: Error description here
ORA-07894: at "NAME_OF_SCHEMA.PROCEDURE_NAME", line 121
ORA-08932: at line 10
स्ट्रिंग मैं उपयोगकर्ता के लिए प्रदर्शित करना चाहते हैं Error description here
है: यहाँ एक उदाहरण है। मैं regex अभिव्यक्तियों का उपयोग करके इस स्ट्रिंग को निकाल सकता हूं क्योंकि मुझे पता है (1) यह स्ट्रिंग हमेशा पहली पंक्ति पर है, इसलिए मैं त्रुटि स्टैक ट्रेस की पहली पंक्ति निकाल सकता हूं, और (2) यह स्ट्रिंग हमेशा Error
से शुरू होती है और समाप्त होती है पंक्ति का अंत। [ओरेकल उपयोगकर्ताओं के लिए नोट (मैं आपको गुमराह नहीं करना चाहता): उपर्युक्त केवल Error
से शुरू होने वाली त्रुटि स्ट्रिंग के साथ RAISE_APPLICATION_ERROR का उपयोग करते समय लागू होता है, अन्यथा पाठ Error
वहां नहीं है]।
जावा के लिए मेरे सवाल कर रहे हैं:
(1) क्या संभावित रूप से संवेदनशील है कि आप उन त्रुटि स्टैक में नहीं देखना चाहते हैं है? यदि ऐसा है तो क्या? उदाहरण के लिए, फ़ाइल पथ, सर्वर नाम/आईपी, आदि
(2) जावा त्रुटि स्टैक ट्रेस के लिए कोई स्वरूपण नियम हैं जो मैं गैर-संवेदनशील जानकारी निकालने के लिए भरोसा कर सकता हूं? या, दूसरों को इस चिंता का समाधान कैसे करें?
अद्यतन 1:
सभी उत्तर के लिए धन्यवाद अब तक, वे बहुत मददगार रहे हैं। जबकि कई लोग उपयोगी उपयोगकर्ता संदेशों में त्रुटियों को मैप करने के लिए getUserFriendlyMessage()
जैसे फ़ंक्शन का उपयोग करने के लिए टिप्पणी करते हैं, मुझे आश्चर्य है कि कोई इस मैपिंग पर विस्तार कर सकता है या नहीं। यही है, सामान्य त्रुटियों (एसक्यूएल, आई/ओ, इत्यादि) के लिए, त्रुटि के प्रकार की पहचान करने के लिए इस त्रुटि स्टैक को खोजने के लिए "विश्वसनीय" पहचानकर्ता का उपयोग किया जा सकता है, और फिर आप किस पाठ पाठ की अनुशंसा करेंगे उपयोगकर्ता को दिखाने के लिए इस त्रुटि संदेश को मैप करने के लिए? @ आदर्श की प्रतिक्रिया नीचे एक अच्छी शुरुआत है। उदाहरण के लिए,
Identified Expected If found in error stack, display this friendly msg to user
------------------- ----------------------------------------------------------
SQLException An error occurred accessing the database. Please contact support at [email protected]
IOException Connection error(?). Please check your internet connection.
मान लें संकलन से संबंधित त्रुटियों को संबोधित करने की जरूरत नहीं है, बल्कि उन त्रुटियों कि अंत उपयोगकर्ताओं सामान्य उपयोग के दौरान अनुभव हो सकता है ध्यान देते हैं। संदर्भ के लिए, यहां रन-टाइम त्रुटि संदेशों की एक सूची दी गई है: http://mindprod.com/jgloss/runerrormessages.html#IOEXCEPTION
वैकल्पिक रूप से, क्या उपयोगकर्ता को प्रदर्शित करने के लिए केवल स्टैक ट्रेस के पहले लाइन का उपयोग करना संभव है? इस कड़ी की तरह है जो मैं ऊपर अपने मूल प्रश्न में पर हो रही थी:
http://www3.ntu.edu.sg/home/ehchua/programming/howto/ErrorMessages.html
उदाहरण के लिए, यदि पहचानकर्ता Exception
हमेशा प्रयोग किया जाता है, एक बस पाठ कि Exception
और के बीच आने वाली निकाल सकते पहली पंक्ति मुझे नहीं पता कि हम हमेशा Exception
पर भरोसा कर सकते हैं या नहीं।
मैंने आपके अपडेट के आधार पर अपना उत्तर अपडेट किया है। –
इस संबंधित प्रश्न को देखें: http://stackoverflow.com/q/7361201/545127 – Raedwald