हमारा वेबकैपेशन ExceptionMapper
कुछ अपवादों को मैप करने के लिए उपयोग कर रहा है Response
। हम एक नया अपवाद फेंकने से पहले अपवाद संदेश लॉग करते हैं:
catch (SomeException ex) {
LOG.error(ex.getMessage());
throw new MyException(ex.getMessage());
}
हम एक ही अपवाद को फिर से नहीं फेंक रहे हैं , इसलिए मेरा सवाल यह है कि क्या यह लॉग और थ्रो एंटीपैटर्न माना जाएगा । और इस प्रकार, क्या यह बेहतर होगा कि समान जगहों पर लॉगिंग को हटा दिया जाए और उन्हें ExceptionMapper
निम्नानुसार कई वर्गों में स्थानांतरित कर दिया जाए :
@Provider
public class MyExceptionMapper implements ExceptionMapper<MyException> {
// bla bla
@Override
public Response toResponse(final MyException ex) {
LOG.error(ex.getMessage());
return Response.status(400).entity("something").build();
}
}
के संभावित डुप्लिकेट चाहिए कि आप अपवाद के संदेश पाठ की रिपोर्ट?
विवाद-योग्य, अपवाद के संदेश पाठ रिपोर्टिंग है हमेशा एक बुरा विचार ।
IMO वास्तव में यह उल्लेख करना उचित नहीं है कि यह एक webservice है। यह वास्तव में खेल के नियमों को बदल देता है, क्योंकि उदाहरण के लिए केवल नियमित अपवाद हैंडलिंग मैकेनिक्स का उपयोग करना सुरक्षा जोखिम हो सकता है; आप किसी भी और सभी अपवादों को केवल 500 त्रुटि प्रतिक्रिया में वापस नहीं भेजना चाहते हैं, जिसे जांचने और फ़िल्टर करने की आवश्यकता है। आक्रामक ऑन-द-स्पॉट लॉगिंग उन प्रणालियों से निपटने के दौरान बहुत अधिक सामान्य है, जिनमें बाहरी क्लाइंट सीधे इसे लागू कर रहे हैं। बार-बार मंगवाए जाने वाले सर्विस कॉल में स्टैकट्रैग लॉग करने से असहनीय लॉग फ़ाइल आकार और प्रदर्शन समस्याएं हो सकती हैं।
@ गिम्बी इस मामले में ओपी प्रतिक्रिया में कोई त्रुटि विवरण नहीं भेजता है (शायद एक बॉयलरप्लेट "त्रुटि" सामग्री)। इसके अलावा, आप बिना किसी समस्या के निदान कैसे करते हैं? रोलिंग लॉगर्स नियमित रूप से स्टोरेज साइज का ध्यान रखते हैं और लॉग डेटा एम्बैरेसेबल कम्प्रेसेबल होता है।
—
मार्को टोपोलनिक
ex.getMessage()
, यह पहले से ही गलत है।