2011-02-07 14 views
38

मैं एक कार्यक्रम मैं लिख रहा हूँ कि मैं (जैसे निदान, नोटिस, चेतावनी, त्रुटि) के लिए एक कस्टम लॉगिंग सुविधा लिखने के लिए चाहते हैं।क्या मुझे stderr या stdout पर संदेश लॉग इन करना चाहिए?

क्या मुझे ऐसा करने के लिए stdout या stderr स्ट्रीम का उपयोग करना चाहिए? यह प्रकार का एक दुभाषिया है और उपयोगकर्ता इसे आउटपुट प्रिंट करने के लिए कह सकता है।

संपादित करें: कृपया मुझे प्रवेश करने चौखटे :(

+0

आप जावा की तरह एक भाषा का उपयोग करते हैं यही कारण है कि प्रसिद्ध लॉगिंग ढाँचे में से एक, log4j की तरह उपयोग नहीं? – flash

+0

मैं वास्तव में अनुशंसा करता हूं कि लॉगिंग लागू करने में समय बिताने से पहले आप कुछ लॉगिंग लाइब्रेरी देखें। यदि आप हमें बताते हैं कि आप कौन सी भाषा लिख ​​रहे हैं, तो मुझे यकीन है कि बहुत सारे सुझाव होंगे। –

+0

आप किस लागेज का उपयोग कर रहे हैं? – CloudyMarble

उत्तर

30

नियमित निर्गम (कार्यक्रम चलाने की वास्तविक परिणाम) की सिफारिश को रोकने stdout पर जाना चाहिए, तो आप चीजों की तरह उल्लेख किया (जैसे निदान, नोटिस, चेतावनी, त्रुटि) stderr पर।

अगर कोई "नियमित उत्पादन" है, मैं कहूँगा कि यह वास्तव में बात नहीं जो एक आप चुनते हैं। आप लोगों का तर्क हो सकता है कि प्रवेश, केवल उत्पादन होता है ताकि stdout के पास जाना चाहिए नहीं है। या फिर आप तर्क दे सकते हैं कि यह अभी भी "असाधारण जानकारी" है जिसे stderr पर जाना चाहिए।

+0

चूंकि यह एक दुभाषिया है, मैं उत्पादन कुछ करने के लिए 'stdout' करने के लिए उपयोगकर्ताओं के बहुमत उम्मीद थी। इसे 'stderr' पर प्रिंट करने के लिए समर्थन हो सकता है, लेकिन मुझे लगता है कि यह उनका अंतिम संस्कार है ... – rfw

8

आप stdout कुछ और लिखना है? अगर जवाब Yes है तो यह काफी मुश्किल हो किसी फ़ाइल कि stdout से पुनर्निर्देशित करने के लिए इस्तेमाल किया गया था के बीच में सामान्य प्रवाह और त्रुटियों के बीच अंतर करने के लिए होगा।

क्या होगा अगर stdout एक अन्य कार्यक्रम के लिए इनपुट के रूप में इस्तेमाल किया जाएगा? क्या यह इस डीबग जानकारी को पार्स करने में सक्षम होगा? इस मामले में stderr पर केवल गंभीर त्रुटियों को लिखना अच्छा होगा। अगर आपको कुछ और लिखना है तो आप अतिरिक्त लॉग फ़ाइल को लिखने पर विचार कर सकते हैं।

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