2008-11-17 18 views
15

कई बार मैंने इस तरह की त्रुटियों के प्रवेश देखा:त्रुटि लॉग करने के लिए सर्वोत्तम प्रथाएं क्या हैं?

System.out.println("Method aMethod with parameters a:"+a+" b: "+b); 
print("Error in line 88"); 

तो .. एक त्रुटि लॉग इन करने के लिए सर्वोत्तम प्रथाओं क्या हैं?

संपादित करें:

यह जावा है, लेकिन C/C++, बुनियादी, आदि हो सकता है

उत्तर

8

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

कॉमन्स लॉगिंग के साथ क्लासलोडिंग समस्याएं भी हैं।

[कई] लॉगिंग एपीआई में से एक चुनें, सबसे व्यापक रूप से उपयोग किया जा सकता है शायद log4j या Java Logging API

यदि आप कार्यान्वयन स्वतंत्रता चाहते हैं, तो आप log4j के मूल लेखक द्वारा SLF4J पर विचार करना चाहेंगे।

कार्यान्वयन करने के बाद, उस कार्यान्वयन के भीतर लॉगिंग स्तर/गंभीरता का उपयोग लगातार, ताकि खोज/फ़िल्टरिंग लॉग आसान हो।

+0

इनके पास आमतौर पर उन्नत विशेषताएं होती हैं जैसे स्वचालित रूप से स्रोत लॉगिंग और स्तर या उत्पत्ति स्थान द्वारा फ़िल्टरिंग। यह डीबगिंग को अधिक आसान बनाता है। इनमें से एक का प्रयोग करें! (चेनसॉ भी देखें) –

0

वास्तव में एक त्रुटि लॉग इन करने के लिए कोई सबसे अच्छा अभ्यास है। यह मूल रूप से केवल एक सतत पैटर्न (सॉफ्टवेयर/कंपनी/आदि के भीतर) का पालन करने की आवश्यकता है जो समस्या को ट्रैक करने के लिए पर्याप्त जानकारी प्रदान करता है। उदाहरण के लिए, आप आदि समय का ध्यान, विधि, पैरामीटर, बुला विधि,

रखने के लिए जब तक तुम सिर्फ प्रिंट न के रूप में "त्रुटि में"

2

सबसे आसान तरीका है एक में त्रुटियों के लिए लॉग इन करना चाह सकते हैं लगातार प्रारूप लॉगिंग फ्रेमवर्क का उपयोग करना है जैसे Log4j (मान लें कि आप जावा का उपयोग कर रहे हैं)। यह सुनिश्चित करने के लिए कि सभी डेवलपर्स को लॉग इन करने की आवश्यकता है, यह सुनिश्चित करने के लिए अपने कोड मानकों में लॉगिंग अनुभाग शामिल करना उपयोगी है। अधिकांश लॉगिंग ढांचे के बारे में अच्छी बात यह है कि उनके पास अलग-अलग लॉगिंग स्तर हैं ताकि आप नियंत्रित कर सकें कि लॉगिंग कैसे वर्बोज़ विकास, परीक्षण और उत्पादन के बीच है।

2

का सर्वोत्तम तरीका java.util.logging ढांचे

तो फिर तुम इन स्वरूपों में से किसी में संदेशों लॉग इन कर सकते

log.warning(".."); 
log.fine(".."); 
log.finer(".."); 
log.finest(".."); 

या

log.log(Level.WARNING, "blah blah blah", e); 

तो आप उपयोग कर सकते उपयोग करने के लिए है लॉगिंग के स्तर के बीच स्विच करने के लिए एक logging.properties (नीचे उदाहरण), और रोटेशन इत्यादि के साथ फ़ाइलों को लॉगिंग जैसे चालाक सामान के सभी प्रकार करते हैं

handlers = java.util.logging.ConsoleHandler 

.level = WARNING 

java.util.logging.ConsoleHandler.level = ALL 

com.example.blah = FINE 
com.example.testcomponents = FINEST 

लॉग 4j और दूसरों जैसे फ्रेमवर्क मेरी राय में टाला जाना चाहिए, जावा में आपके पास पहले से ही सब कुछ चाहिए।

संपादित

यह किसी भी प्रोग्रामिंग भाषा के लिए एक सामान्य अभ्यास के रूप में आवेदन कर सकते हैं। एक एकल संपत्ति फ़ाइल से लॉगिंग के सभी स्तरों को नियंत्रित करने में सक्षम होने के कारण एंटरप्राइज़ अनुप्रयोगों में अक्सर बहुत महत्वपूर्ण होता है।

2

कुछ सर्वोत्तम प्रथाओं

  • एक प्रवेश ढांचे का उपयोग का सुझाव दिया। यह आपको करने की अनुमति देगा:

    • आसानी से अपने लॉग संदेशों के गंतव्य बदल गंभीरता के आधार पर
    • समर्थन अंतर्राष्ट्रीय लॉग संदेशों
  • फ़िल्टर लॉग संदेश आप जावा का उपयोग कर रहे हैं, तो slf4j अब लॉगिंग मुखौटा के रूप में Jakarta commons logging को प्राथमिकता दी गई है।

  • जैसा कि कहा गया है कि slf4j एक मुखौटा है, और आपको एक अंतर्निहित कार्यान्वयन करना होगा। या तो log4j, java.util.logging, या 'सरल'।

  • expensive logging operations सुनिश्चित करने के लिए अपने ढांचे की सलाह का पालन बेकार में बाहर नहीं किया जाता है

0

उपरोक्त वर्णित अपाचे सामान्य लॉगिंग एपीआई एक महान संसाधन है। जावा पर वापस संदर्भित करते हुए, एक मानक त्रुटि आउटपुट स्ट्रीम (System.err) भी है।

जावा एपीआई से सीधे

:

इस धारा पहले से ही खुला और आउटपुट डेटा स्वीकार करने को तैयार है।

आमतौर पर यह स्ट्रीम डिस्प्ले आउटपुट या अन्य आउटपुट होस्ट पर्यावरण या उपयोगकर्ता द्वारा निर्दिष्ट गंतव्य से मेल खाती है। परंपरा के मुताबिक, इस उत्पादन धारा त्रुटि संदेश या अन्य जानकारी है कि एक उपयोगकर्ता के तत्काल ध्यान में आया चाहिए, भले ही प्रिंसिपल उत्पादन धारा, चर बाहर के मूल्य को पुनः निर्देशित कर दिया गया है प्रदर्शित करने के लिए प्रयोग किया जाता है एक फ़ाइल या अन्य गंतव्य जो है आमतौर पर निरंतर निगरानी नहीं की जाती है।

22

सीधे कंसोल पर लॉग इन करना एक अनुभवहीन डेवलपर का निशान है, जो भयानक और स्पष्ट रूप से है। इस तरह की चीज करने का एकमात्र कारण 1 है) वह अन्य दृष्टिकोणों से अनजान है, और/या 2) डेवलपर ने सोचा नहीं है कि उसके कोड को उत्पादन साइट पर तैनात किए जाने पर क्या होगा, और उस बिंदु पर एप्लिकेशन कैसे बनाए रखा जाएगा। पूरी तरह से अनियंत्रित डीबग लॉगिंग के 1 जीबी/दिन या अधिक लॉगिंग करने वाले एप्लिकेशन से निपटना गड़बड़ है।

आम तौर पर स्वीकार सबसे अच्छा अभ्यास एक लॉगिंग ढांचा है की अवधारणाओं का उपयोग करना है:

  1. विभिन्न लॉग वस्तुओं - विभिन्न वर्गों/मॉड्यूल/आदि, विभिन्न वालों के लिए लॉग इन करें ताकि आप विभिन्न लॉग लागू करने के लिए चुन सकते हैं कर सकते हैं आवेदन के विभिन्न हिस्सों के लिए विन्यास।
  2. विभिन्न लॉग स्तरों - तो आप लॉगिंग विन्यास ठीक कर सकते हैं केवल उत्पादन में त्रुटियों लॉग इन करें, डिबग के सभी प्रकार के लॉग इन करें और एक विकास के वातावरण में जानकारी का पता लगाने के, आदि
  3. विभिन्न लॉग आउटपुट के लिए - ढांचे के लिए आप की अनुमति चाहिए कॉन्फ़िगर करें जहां लॉग आउटपुट को कोडबेस में किसी भी बदलाव की आवश्यकता के बिना भेजा जाता है। अलग-अलग स्थानों के कुछ उदाहरण आप फ़ाइलें हैं करने के लिए लॉग उत्पादन भेजने के लिए चाहते हो सकता है, कि रोल पर तारीख/आकार, डेटाबेस, ईमेल, दूरस्थ सिंक, आदि
  4. लॉग ढांचा होना चाहिए कभी नहीं कभी नहीं कभी नहीं फेंक आधार पर फ़ाइलें लॉगिंग कोड से कोई अपवाद या त्रुटियां। आपका एप्लिकेशन लोड करने में विफल नहीं होना चाहिए या शुरू करने में असफल होना चाहिए क्योंकि लॉग फ्रेमवर्क फ़ाइल की लॉक फ़ाइल नहीं बना सकता है या फ़ाइल पर लॉक प्राप्त नहीं कर सकता है (जब तक कि यह आपके ऐप के लिए कानूनी कारणों से एक महत्वपूर्ण आवश्यकता न हो)।

अंतिम लॉग फ्रेमवर्क जिसका आप उपयोग करेंगे, निश्चित रूप से आपके प्लेटफॉर्म पर निर्भर करेगा। कुछ सामान्य विकल्प:

0
तकनीकी कारणों के अलावा

अन्य उत्तर से यह लॉग एक सार्थक संदेश और शायद कुछ कदम उचित है से बचने के लिए भविष्य में त्रुटि। निश्चित रूप से त्रुटियों के आधार पर।

संदेश को I/O-त्रुटि से अधिक प्राप्त हो सकता है जब संदेश जैसा कुछ कहता है "फ़ाइल एक्स से नहीं पढ़ा जा सका, आपके पास उचित अनुमति नहीं है।"

SO या search the web पर और उदाहरण देखें।

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

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