का उपयोग अपने आवेदन में, मैं PMD.It के माध्यम से अपने कोड चला रहा हूँ मुझे यह संदेश दिखाता है:प्रिंटस्टैकट्रेस से बचें(); एक लकड़हारा कॉल के बजाय
- printStackTrace से बचें(); इसके बजाय एक लॉगर कॉल का उपयोग करें।
इसका क्या अर्थ है?
का उपयोग अपने आवेदन में, मैं PMD.It के माध्यम से अपने कोड चला रहा हूँ मुझे यह संदेश दिखाता है:प्रिंटस्टैकट्रेस से बचें(); एक लकड़हारा कॉल के बजाय
- printStackTrace से बचें(); इसके बजाय एक लॉगर कॉल का उपयोग करें।
इसका क्या अर्थ है?
इसका मतलब है कि आप logback या log4j की तरह प्रवेश ढांचे का उपयोग करना चाहिए और सीधे मुद्रण अपवाद के बजाय:
log.error("Ops!", e);
लॉगिंग चौखटे आप दे:
e.printStackTrace();
आप उन्हें इस चौखटे 'एपीआई का उपयोग कर लॉग इन करना चाहिए बहुत लचीलापन, उदाहरण के लिए आप चुन सकते हैं कि आप कंसोल या फ़ाइल में लॉग इन करना चाहते हैं - या शायद कुछ संदेशों को छोड़ दें यदि आप उन्हें किसी पर्यावरण में अब प्रासंगिक नहीं पाते हैं।
यदि आप अपवाद पर printStackTrace()
पर कॉल करते हैं तो ट्रेस System.err
पर लिखा गया है और इसे कहीं और रूट करना मुश्किल है (या इसे फ़िल्टर करें)। ऐसा करने के बजाय आपको लॉगिंग फ्रेमवर्क (या कई लॉगिंग फ्रेमवर्क के आसपास एक रैपर, अपाचे कॉमन्स लॉगिंग जैसे) का उपयोग करने और उस ढांचे का उपयोग करके अपवाद लॉग करने की सलाह दी जाती है (उदा। logger.error("some exception message", e)
)।
कि ऐसा करने की अनुमति देता कंसोल और एक फ़ाइल
एक उत्पादन गुणवत्ता कार्यक्रम त्रुटियों और अन्य निदान रिपोर्ट करने के लिए कई लॉगिंग विकल्प में से एक (जैसे log4j, logback, java.util.logging) का उपयोग करना चाहिए। इसमें कई फायदे हैं:
इसके विपरीत, अगर तुम सिर्फ printStackTrace उपयोग करते हैं, deployer/अंत उपयोगकर्ता थोड़ा यदि कोई नियंत्रण है, और प्रवेश संदेश खो या तो करने के लिए या अनुचित परिस्थितियों में अंत उपयोगकर्ता को दिखाया उत्तरदायी हैं।(और कुछ भी यादृच्छिक स्टैक ट्रेस से अधिक डरावनी उपयोगकर्ता को डरता नहीं है।)
लगभग हर लॉगिंग फ्रेमवर्क एक तरीका प्रदान करता है जिसमें हम एक संदेश के साथ फेंकने योग्य वस्तु को पार कर सकते हैं। पसंद:
public trace(Marker marker, String msg, Throwable t);
वे फेंकने योग्य वस्तु के स्टैकट्रैक को प्रिंट करते हैं।
सरल में, e.printStackTrace() अच्छी प्रथा नहीं है, क्योंकि यह मानक त्रुटि के लिए स्टैक ट्रेस को प्रिंट करता है। इस वजह से आप वास्तव में नियंत्रित नहीं कर सकते कि यह आउटपुट कहां जाता है।
बस कहीं और मूल्यवान प्रतिक्रिया के लिए धन्यवाद कह रहा है ;-) – GhostCat