2009-04-23 15 views
10

मेरा प्रश्न सरल है: लॉग में क्या लिखना है। क्या कोई सम्मेलन है? मुझे क्या करना है?लॉग फ़ाइल में क्या लिखना है?

के बाद से मेरे ऐप जारी होने की है, मैं दोस्ताना लॉग, जो पूछ कि यह क्या है के बिना ज्यादातर लोगों द्वारा पढ़ा जा सकता है करना चाहते हैं।

मेरे पास पहले से ही कुछ विचार हैं, जैसे कि टाइमस्टैम्प, प्रत्येक फ़ंक्शन/विधि आदि के लिए एक अद्वितीय पहचानकर्ता .. मुझे कई लॉग स्तर, जैसे ट्रेसिंग/डिबगिंग, सूचनाएं, त्रुटियां/चेतावनियां चाहिए।

आप कुछ पहले से फ़ॉर्मेट लॉग संसाधनों का उपयोग करते हैं?

धन्यवाद

+2

इसके लायक होने के लिए, लॉग आमतौर पर उपयोगकर्ताओं द्वारा पढ़ा जाने का इरादा नहीं है, इसलिए अधिकांश लोग उन्हें "दोस्ताना" के बजाय सूचनात्मक बनाने की कोशिश करते हैं ... –

+2

@ डेविड: क्या? अधिकांश लॉग प्रशासकों द्वारा पढ़े जाते हैं - जो उपयोगकर्ताओं की एक श्रेणी हैं। सुनिश्चित नहीं है कि आप किस बारे में बात कर रहे हैं। व्यवस्थापक के लिए "दोस्ताना" आमतौर पर "पूर्ण" - दिनांक टिकट, सत्र आईडी, मॉड्यूल नाम, गंभीरता स्तर, एक संदेश जो एक पंक्ति पर फिट बैठता है, का अर्थ है –

+0

दोस्ताना साधन यहां है कि लॉग प्रारूप को पार्स करना आसान, पढ़ना, और ऐप –

उत्तर

9

यहां ऐसी सामग्री के लिए कुछ सुझाव दिए गए हैं:

  • टाइमस्टैम्प
  • संदेश
  • लॉग संदेश का प्रकार (त्रुटि, चेतावनी, का पता लगाने, डिबग जैसे)
  • धागा आईडी (आप एक बहु थ्रेडेड अनुप्रयोग से लॉग फ़ाइल का मतलब कर सकते हैं ताकि)
  • कार्यान्वयन के लिए

श्रेष्ठ व्यवहार: ताकि आप सुनिश्चित करें कि प्रत्येक लिखने सुरक्षित थ्रेड और मतलब होगा हो सकता है

  • लिखने विधि के चारों ओर एक म्युटेक्स रखो।
  • लॉग फ़ाइल के लिए एक बार में कम 1 संदेश भेजें, और लॉग संदेश के प्रकार हर बार निर्दिष्ट करें। फिर आप प्रोग्राम स्टार्टअप पर किस प्रकार के लॉगिंग लेना चाहते हैं सेट कर सकते हैं।
  • फ़ाइल पर कोई बफरिंग प्रयोग करें, या मामले में अक्सर फ्लश वहाँ एक कार्यक्रम दुर्घटना है।

संपादित करें: मैं सिर्फ सवाल देखा अजगर के साथ टैग किया गया था, तो कृपया मेरा पहले एस लोट के जवाब देखें। यह आपकी जरूरतों के लिए पर्याप्त हो सकता है।

+0

के बारे में उचित जानकारी रखने के लिए अधिकांश उपकरणों के साथ सक्षम होने के लिए किसी भी उपयोगकर्ता (जैसे वर्तमान उपयोगकर्ता या व्यवस्थापक) की संभावना प्रदान करते हैं, मैंने यह जवाब स्वीकार कर लिया है, क्योंकि यह मेरी प्रतीक्षा का जवाब दे रहा है, भले ही लिंक द्वारा प्रदान किया गया हो एसएलॉट उपयोगी था। धन्यवाद –

18

यह काफी सुखद है, और पहले से ही लागू किया गया है।

इस पढ़ें: http://docs.python.org/library/logging.html


संपादित

", पार्स करने के लिए आसान है, पढ़ने के लिए" आम तौर पर कर रहे हैं विरोधाभासी सुविधाओं। अंग्रेजी - पढ़ने के लिए आसान, पार्स करने के लिए मुश्किल है। एक्सएमएल - पढ़ने के लिए मुश्किल, पार्स करने में आसान है। ऐसा कोई प्रारूप नहीं है जो आसानी से पढ़ा जा सके और आसानी से पार्स प्राप्त कर सके। कुछ लॉग प्रारूप "पढ़ने के लिए भयानक नहीं हैं और पार्स करना असंभव नहीं है"।

कुछ लोग एकाधिक हैंडलर बनाते हैं ताकि एक लॉग में कई प्रारूप हो: लोगों को पढ़ने के लिए सारांश और स्वचालित पार्सिंग के लिए एक एक्सएमएल संस्करण।

1

चूंकि आपने अपना प्रश्न पायथन टैग किया है, इसलिए मैं आपको this question पर भी संदर्भित करता हूं। सामग्री के लिए, ब्रायन प्रस्ताव अच्छा है। याद रखें कि यदि आप साझा लॉग का उपयोग कर रहे हैं तो प्रोग्राम नाम जोड़ना याद रखें।

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

0

टाइमस्टैम्प यानी दिनांक समय yyyy/mm/डीडी: HH: mm: ss: एमएस उपयोगकर्ता थ्रेड ID फ़ंक्शन नाम संदेश/त्रुटि संदेश/सफलता संदेश/समारोह ट्रेस

इस XML स्वरूप में है आप और इसके बाद आसानी से इसके लिए एक पार्सर लिख सकते हैं।

<log> 
    <logEntry DebugLevel="0|1|2|3|4|5...."> 
    <TimeStamp format="YYYY/MM/DD:HH:mm:ss:ms" value="2009/04/22:14:12:33:120" /> 
    <ThreadId value="" /> 
    <FunctionName value="" /> 
    <Message type="Error|Success|Failure|Status|Trace"> 
     Your message goes here 
    </Message> 
    </logEntry> 
</log> 
+3

कुछ लोग सोचते हैं कि एक्सएमएल सब कुछ का जवाब है (इसलिए कुछ रेगेक्स बोड करें) लेकिन मैं असहमत हूं। एक्सएमएल फ़ाइल की तुलना में सामान्य टेक्स्ट-प्रोसेसिंग टूल के साथ एक निश्चित प्रारूप लॉग फ़ाइल को पार्स करने के लिए यह इतना आसान (संभवतः आसान) है। और आप बेकार जगह लेने वाली फाइल में "शोर" के साथ खत्म नहीं होते हैं। – paxdiablo

+0

कुछ पीपीएलजे अपने विचारों को सोचते हैं जो तय करते हैं कि क्या सही है और क्या नहीं है। कोई असहमत हो सकता है लेकिन यह कुछ भी साबित नहीं करता है। और जिस तरह से कुछ pplz यहां उनके लिए अपना अधिकार लागू करने के लिए हैं, मैं सुझाव देता हूं कि हमारे लिए सम्मान करने और दूसरों को स्थान देने के लिए सीखने का समय है। भाग लेने के बाद कुछ समय समाधान उतना महत्वपूर्ण नहीं हो सकता है। –

+0

मुझे यह मानना ​​है कि मुझे एक्सएमएल बहुत पसंद नहीं है, यह एक व्यक्तिगत राय है, और मैं प्रस्ताव के लिए धन्यवाद, लेकिन मैसी एक्सएमएल फाइलों की तुलना में मैं एक साधारण टेक्स्ट फ़ाइल के साथ अधिक आरामदायक हूं, मैंने कहा, मैं कुछ में सहमत हूं मामले में यह उपयोगी है, espscially वेब अनुप्रयोगों में। –

1

लॉग विश्लेषण सॉफ़्टवेयर को देखना एक अच्छा विचार है। जब तक आप अपना खुद का लिखने की योजना नहीं बनाते, तो आप शायद एनालॉग जैसे मौजूदा लॉग विश्लेषण पैकेज का फायदा उठाना चाहेंगे। यदि ऐसा है, तो आप शायद एक लॉग आउटपुट जेनरेट करना चाहते हैं जो प्रारूपों के लिए पर्याप्त है जो इसे स्वीकार करता है। यह आपको कम से कम प्रयास के साथ अच्छे चार्ट और ग्राफ बनाने की अनुमति देगा!

1

मेरी राय में, मौजूदा लॉगिंग पुस्तकालयों जैसे log4j (or it's variations for other languages) का उपयोग करना सबसे अच्छा तरीका है। यह आपको नियंत्रित करता है कि आपके संदेशों को कैसे स्वरूपित किया गया है और आप इसे कभी भी अपने कोड को छूए बिना बदल सकते हैं। यह सर्वोत्तम प्रथाओं का पालन करता है, मजबूत और लाखों उपयोगकर्ताओं द्वारा उपयोग किया जाता है। बेशक, आप अपने स्वयं के लॉगिंग फ्रेमवर्क लिख सकते हैं, लेकिन ऐसा करने के लिए यह बहुत ही अजीब बात होगी, जब तक आपको कुछ विशिष्ट की आवश्यकता न हो। किसी भी मामले में, उनके दस्तावेज़ों के बावजूद चलें और देखें कि वहां लॉग बयान कैसे प्रस्तुत किए जाते हैं।

चेक बाहर log4py - अजगर पोर्ट log4j के संस्करण, मुझे लगता है कि वहाँ बाहर अजगर के लिए कई कार्यान्वयन देखते हैं ..

0

अजगर की लॉगिंग पुस्तकालय धागा सुरक्षित एकल प्रक्रिया धागे के लिए कर रहे हैं।

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