2011-03-08 15 views
19

पर तैनात नेट। क्या आप कहेंगे this एक Azure तैनात एप्लिकेशन में सरल पारंपरिक लॉगिंग करने का सबसे इष्टतम तरीका है?लॉग इन करने का पसंदीदा तरीका। Azure

तो बहुत काम की तरह लगता है वास्तव में फ़ाइलें आदि को पाने के लिए ...

क्या आपके लिए सबसे अच्छा काम किया है?

+1

शायद [सर्वोत्तम प्रथाओं के लिए-लॉगिंग-एंड-ट्रेसिंग-इन-नेट] (http://programmers.stackexchange.com/questions/57064/best-practices-for-logging-and-tracing-in- net /) programmers.stackexchange पर भी उपयोगी है – k3b

उत्तर

8

हम एज़ूर टेबल स्टोरेज को लिखने वाले डायग्नोस्टिक्स में निर्माण का उपयोग करते हैं। किसी भी समय हमें लॉग में लिखे गए संदेश की आवश्यकता होती है, यह सिर्फ एक "Trace.WriteLine (...)" है।

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

http://msdn.microsoft.com/en-us/library/gg433048.aspx

आशा है कि यह मदद करता है!

[अपडेट]

public void GetLogs() { 
     int cnt = 0; 
     bool foundRows = false; 
     var entities = context.LogTable; 
     while (1 == 1) { 
      foreach (var en in entities) { 
       processLogRow(en); 
       context.DeleteObject(en); 
       cnt++; 
       try { 
        if (cnt % 100 == 0) { 
         foundRows = true; 
         context.SaveChanges(SaveChangesOptions.Batch); 
        } 
       } catch (Exception ex) { 
        Console.WriteLine("Exception deleting batch. {0}", ex.Message); 
       } 
      } 
      if (!foundRows) 
       break; 
      else { 
       context.SaveChanges(SaveChangesOptions.Batch); 
      } 
      foundRows = false; 
     } 
     Console.WriteLine("Done! Total Deleted: {0}", cnt); 
    } 
+0

कोई भी मौका कि डाउनलोडर कोड कहीं पोस्ट किया गया है? मैं बस कुछ ऐसा करने के लिए तैयार हो रहा हूँ। –

+1

पूर्ण कोड कहीं भी पोस्ट नहीं किया गया है, लेकिन मैं इस पोस्ट को मुख्य लूप के साथ अपडेट करूंगा जो लॉग डाउनलोड करता है। यह आपको एक विचार दे सकता है कि यह कैसे काम करता है। – Brosto

+0

यह उत्तर केवल समस्या पर हमला करने का एक तरीका बताता है। आम तौर पर, आप नवीनतम डेटा को रखने के लिए केवल रोलिंग फ़ैशन में डिस्क पर लॉग ऑन करेंगे, और Azure संग्रहण खाते पर भी लॉग ऑन करेंगे जो वर्तमान में डेटा रोल नहीं कर सकता है। इसके अलावा, अभी तक, सिस्टम.डिग्नोस्टिक्स के बजाय इवेंटसोर्स (ईटीडब्ल्यू) का उपयोग करने की अनुशंसा की जाती है। क्योंकि आप ईटीडब्ल्यू के माध्यम से प्रारूपण को नियंत्रित कर सकते हैं। – user3613932

6

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

ऐसे Trace.TraceError(), Trace.TraceWarning(), आदि

तुम भी एक ट्रेस श्रोता बना सकते हैं और अपने स्थानीय मशीन पर लगभग-वास्तविक समय में अपनी लॉग उत्पादन देख सकते हैं के रूप में अतिरिक्त ट्रेस बयान, कर रहे हैं । Azure AppFabric SDK नमूने ज़िप में ऐसा करने के लिए एक नमूना (\ ServiceBus \ Scenarios \ CloudTrace के तहत) होता है।

2

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

हालांकि ट्रेस फ़ंक्शंस का उपयोग करने से सीधे ठीक काम करता है, मैं एक लॉगिंग फ्रेमवर्क जैसे एनएलओजी या लॉग 4नेट का उपयोग करने का सुझाव दूंगा। यह आपको कुछ संदेश ट्रेस/एज़ूर डायग्नोस्टिक्स और अन्य को स्थानीय संग्रहण में भेजने के लिए थोड़ा अधिक लचीलापन देता है।

उदाहरण के लिए, मैंने थ्रेड-फांसी समस्या को ट्रैक करने के लिए ट्रेस लॉगिंग का एक टन जोड़ा। मैंने पाया कि "\ ServiceLogs \ MyLog.txt" जैसे रूट-रिश्तेदार फ़ाइल पथ को उदाहरण पर F: ड्राइव पर आउटपुट किया जाएगा। इसलिए मैंने डायग्नोस्टिक्स टेबल की बजाय इंस्टेंस फाइल सिस्टम को सब कुछ भेजा। आपको उन लॉग को देखने के लिए प्रत्येक इंस्टेंस में रिमोट करना होगा, लेकिन इस परिस्थिति में यह एक अच्छा व्यापार है।

2

मैं एंटरप्राइज़ लाइब्रेरी 5.0 लॉगिंग एप्लिकेशन ब्लॉक का उपयोग Azure डायग्नोस्टिक मॉनिटर ट्रेस श्रोता को इंगित करता हूं।

Enterprise Library on Windows Azure

4

सबसे अच्छा समाधान मैंने देखा कि प्रवेश करने त्रुटि के लिए Elmah है। इसके लिए SQL डेटाबेस की आवश्यकता है, लेकिन यह त्रुटि लॉगगन उपकरण है जो वास्तव में समस्याओं का निदान करने में सहायता करता है।यह Azure पर ठीक काम करता है।

+2

आप टेबल संग्रहण के साथ काम करने के लिए ELMAH को कॉन्फ़िगर कर सकते हैं। उदाहरण के लिए देखें http://www.wadewegner.com/2011/08/using-elmah-in-windows-azure-with-table-storage/ – Sam

3

मेरी सभी Azure साइट्स के लिए मैं Azure टेबल पर कस्टम लॉगिंग का उपयोग करता हूं। हालांकि थोड़ा और काम, मुझे लगता है कि यह मुझे संग्रहीत जानकारी पर अधिक नियंत्रण देता है। टिप्पणी के ऊपर ब्रोस्टो की तरह, स्थानीय प्रक्रिया होना सर्वोत्तम होता है जो समय-समय पर आपके स्थानीय सिस्टम में लॉग डाउनलोड करता है। यदि आप TableServiceEntity से कक्षा प्राप्त करते हैं तो आप उन सभी फ़ील्ड वाली संरचना को परिभाषित कर सकते हैं, जिन्हें आप लॉग करना चाहते हैं और लॉग को पुनर्प्राप्त करने वाले आपके स्थानीय एप्लिकेशन में डेटा पुनर्प्राप्त करने के लिए उसी कक्षा का उपयोग करें। मैं अपने logging using Azure table storage पृष्ठ पर ऐसा करने के लिए कोड के कुछ उदाहरण बनाए रखता हूं यदि यह किसी के लिए किसी भी मदद की है।

Trace.Writeline विधि का उपयोग करने के साथ मैंने अनुभव की समस्याओं में से एक यह है कि लॉग स्थानीय घटना पर संग्रहीत होते हैं और समय-समय पर एज़ूर टेबल स्टोरेज में स्थानांतरित होते हैं। एक Azure उदाहरण की क्षणिक प्रकृति को देखते हुए, सभी स्थानीय भंडारण को अस्थायी माना जाना चाहिए। इसलिए स्थानीय ड्राइव पर होने पर आपके लॉग डेटा को खोने के लिए हमेशा एक खिड़की होती है।

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

0

परंपरागत लॉगिंग फ्रेमवर्क Story framework पर वास्तव में आपकी लॉग को पढ़ने में वास्तव में मदद नहीं कर सकता है, यह संदर्भ में आप सभी लॉग (और अन्य प्रासंगिक जानकारी जोड़ते हैं) लिखते हैं, इसलिए जब आपको बाद में इसे पढ़ने की आवश्यकता होती है आपको जो भी चाहिए।

यह Azure टेबल संग्रहण में लॉग को बनाए रखने का भी समर्थन करता है।

this blog post पर अधिक जानकारी और नमूने हैं।

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