वेलिपि में लॉग किया जा रहा है. एनईनेट अनुप्रयोग ( पार्ट 1... संभवतः...) (हिन्दी (Hindi))

वेलिपि में लॉग किया जा रहा है. एनईनेट अनुप्रयोग ( पार्ट 1... संभवतः...)

Comments

NOTE: Apart from English (and even then it's questionable, I'm Scottish). These are machine translated in languages I don't read. If they're terrible please contact me.
You can see how this translation was done in this article.

Sunday, 27 October 2024

//

Less than a minute

परिचय

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

यह लॉगिंग के लिए एक पूर्ण मार्गदर्शक नहीं है, वहाँ उन लोगों के LOOएस है, यह अधिक के लिए एक प्रभावी लॉगिंग नीति चुनने के बारे में है अपने अतिरिक्त अनुप्रयोग.

मुख्य लॉगिंग के लिए उपयोग किया जाना चाहिए, क्या यह अविश्वसनीय है जब आप विकसित कर रहे हैं या उत्पादन में लॉगिन में यह आपके लिए / अपनी टीम / अपने उपयोक्ताों के लिए उपयोगी होना चाहिए.

समस्या

कई बार लॉगिंग देखा जाता है के रूप में केवल जब वहाँ अपवाद है. मुझे लगता है कि इस गलतफहमी क्या लॉगिंग होना चाहिए.

( अँग्रेज़ी) सिर्फ जानकारी के लिए नहीं है

सामान्य रूप से, आप अपने अनुप्रयोग का एक महत्त्वपूर्ण हिस्सा स्थानीय रूप से चलाने में समर्थ हो सकते हैं; इस संदर्भ में log.LogInformation अपने दोस्त है.

हल

हस्तांतरण सफलता

30 साल से अधिक समय के दौरान मैंने लिखा है मैं अच्छे लॉगिंग के कुछ उदाहरणों को देखा है और गरीब लॉगिंग के अधिक उदाहरण.

अच्छे लॉगिंग के सिद्धांत:

  1. विकास में लॉगिन के बारे में पर्याप्त जानकारी देनी चाहिए जब आपका अनुप्रयोग क्या हो रहा है समझने के लिए क्या हो रहा है.
  2. उत्पाद में लॉगिन आपको एक सुपर त्वरित और आसान सुविधा देना चाहिए कि कैसे आपका अनुप्रयोग असफल हो गया.
  3. उत्पादन में सीमित लॉगिन एक नकारात्मक है; यह आपके अनुप्रयोग को धीमा कर सकता है और महत्वपूर्ण सामान खोजने के लिए मुश्किल कर सकता है.

याद रखें; लॉगिंग हमेशा आपके अनुप्रयोग प्रदर्शन को नीचे खींचता है; आपको क्या जारी रखना चाहिए एक अंक का पुनः प्रयोग करने के लिए, लेकिन जहां प्रदर्शन गंभीर है (e. g.g, जब पूर्ण डिबग प्रयोग किया जा रहा हो, एक प्रदर्शन परीक्षा नहीं चलाएँ.

अनजाने में लॉगिंग की तरह.

सेरेलॉग vs. विस्तार.

शायद आपके पास पहले से ही लॉगिंग सिस्टम में निर्माण है। Microsoft.Extensions.Logging___ यह एक अच्छा लॉगिंग तंत्र है, लेकिन यह के रूप में केलर लॉग के रूप में नहीं है. सर्वरिलॉग एक अधिक विशेषज्ञ तंत्र है जो आपको अनेक सिंक (बाहर) में लॉग करने और अतिरिक्त जानकारी के साथ अपने लॉगों को समृद्ध करने देता है.

बूट- आकार लॉग किया जा रहा है

यह लॉगिंग है जब आपका अनुप्रयोग प्रारंभ होता है. यह पहली बात है कि होता है, और यह पहली बात है जब आप अपने अनुप्रयोग चलाते हैं. एक अतिरिक्त में विशेष रूप से जब आप कॉन्फ़िगरेशन उपयोग करते हैं तब यह आपको महत्वपूर्ण है कि क्या हो रहा है जब आपका अनुप्रयोग प्रारंभ होता है. यह एक बहुत ही आम स्रोत है एक किहिक अनुप्रयोग में मुद्दों का.

सेरिल में उदाहरण के लिए आप यह कर सकते हैं:

Log.Logger = new LoggerConfiguration()
             .WriteTo.Console()
             .WriteTo.File("logs/boot-*.txt", rollingInterval: RollingInterval.Day, retainedFileCountLimit: 7)
             .CreateBootstrapLogger();

नोट: यह तभी सीमित है जब आप इस बिंदु पर कॉन्फ़िगरेशन करने के लिए इस बिंदु पर पहुँच नहीं पाते ताकि एप्लिकेस का उपयोग करने के लिए उदाहरण के लिए जिसे आपने संभवतः आवश्यकता होगी #if RELEASE उचित कुंजी सेट करने के लिए ब्लॉक.

यह आपको आपके अनुप्रयोग में किसी भी प्रारंभ विषय के बारे में जानकारी देता है, यह कंसोल तथा फ़ाइल दोनों को लिखता है. यह भी महत्वपूर्ण है कि आप सभी लॉग फ़ाइलों को बचाने के लिए नहीं है, आप यहाँ देख सकते हैं हम केवल 7 दिन लॉग के लायक हैं.

आप भी अपनी स्टार्टअप विधि को लपेटना चाहेंगे (इस ए आईएओ में मैं नया उपयोग करता हूँ) Program.cs विधि एक कोशिश/चक में और कोई अपवाद है कि वहाँ हो.

try
 {
        ..all your startup code
 }
catch (Exception ex)
{
    if(args.Contains("migrate"))
    {
        Log.Information("Migration complete");
        return;
    }
    Log.Fatal(ex, "Application terminated unexpectedly");
}
finally
{
    Log.CloseAndFlush();
}

लॉग. बंद करना महत्वपूर्ण है क्योंकि यह सभी लॉगों को डिस्क में लिखा जाता है (आपके एएसटीए को बंद कर दिया है ताकि इससे पहले यह बाहर हो जाए).

यहाँ मैं यह भी पता लगा सकता हूँ कि क्या ए आईए ए आईआईएस एक उत्प्रवासन विधि में चल रहा है और अगर मैं लॉग करता हूँ तो कि और बाहर निकलें.

Log.Fatal सबसे गंभीर लॉग स्तर है; यह तब प्रयोग किया जाता है जब आपका अनुप्रयोग क्रैश करने के बारे में होता है. सभी अपवाद गंभीर नहीं हैं - आपको उपयोग करना चाहिए Log.Error उन लोगों के लिए (अभी तक उनके निवेदन का मतलब नहीं) जारी रख सकते हैं.

लॉग लेबल

शायद आपके पास कई लॉग स्तर हैं:

  1. Log.Fatal - यह सबसे गंभीर लॉग स्तर है; यह प्रयोग किया जाता है जब आपका अनुप्रयोग क्रैश करने के बारे में होता है.
  2. Log.Error - यह प्रयोग किया जाता है जब कोई अपवाद होता है कि एपीपी का मतलब है (कोई निवेदन नहीं) उस बिंदु से पहले जारी नहीं रह सकता.
  3. Log.Warning - यह इस्तेमाल किया जाता है जब कुछ गलती नहीं है लेकिन आप के बारे में कुछ पता होना चाहिए (उदाहरण के लिए एक घृणित सेवा / पर्याप्त सही नहीं लेकिन एक त्रुटि नहीं है.
  4. Log.Information - यह आपके अनुप्रयोग में क्या हो रहा है के बारे में सामान्य जानकारी के लिए उपयोग में लिया जाता है.
  5. Log.Debug - यह जानकारी के लिए उपयोग में आता है कि जब आप अपने अनुप्रयोग को डिबगिंग कर रहे हैं (यह विकास में हर जगह है लेकिन उत्पादन में बंद किया जाना चाहिए).

उत्पादन के लिए मैं आमतौर पर लॉगिंग सेट होता है Log.Fatal, Log.Error और Log.Warning केवल.

रन समय लॉगिंग

प्रारंभ करने के बजाए यह लॉगिंग होता है जब आपका अनुप्रयोग चल रहा होता है. यह लॉगिंग है जो आपको बताता है कि आपके अनुप्रयोग में क्या हो रहा है किसी भी दिए गए समय पर.

उदाहरण के लिए सेरलॉग में इन का उपयोग करने के लिए आप यह करना चाहते हैं:

  "Serilog": {
    "Enrich": ["FromLogContext", "WithThreadId", "WithThreadName", "WithProcessId", "WithProcessName", "FromLogContext"],
    "MinimumLevel": "Warning",
    "WriteTo": [
        {
          "Name": "Seq",
          "Args":
          {
            "serverUrl": "http://seq:5341",
            "apiKey": ""
          }
        },
      {
        "Name": "Console"
      },
      {
        "Name": "File",
        "Args": {
          "path": "logs/applog-.txt",
          "rollingInterval": "Day"
        }
      }

    ],
    "Properties": {
      "ApplicationName": "mostlylucid"
    }
  },

समृद्ध

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

मैने कई 'स्ट्सिल्स' में जाने के लिए लॉगिंग भी सेट किया; इस मामले में मैं इसे दिलासा देने के लिए, एक फ़ाइल में और सेक्ख (एक लॉगिंग सेवा) करने के लिए भेज रहा हूँ।

कई सिंक हो रहा है अगर एक असफल हो गया है, इस मामले में मेरी पसंदीदा लॉगिंग सेवा Sque है, तो मैं उसे पहले वहाँ भेजें. तो अगर वह असफल हुआ तो मैं इसे कंसोल में और एक फ़ाइल में भेज दिया.

मैंने लॉग में अनुप्रयोग नाम गुण सेट किया है; यह उपयोगी हो सकता है यदि आपके पास समान सेवा के लिए कई अनुप्रयोग हैं (जिसे आप अकसर वितरित अनुप्रयोगों के लिए करते हैं; साथ ही एक निवेदन के लिए लॉग के साथ.

उदाहरण के लिए यदि आपके पास कोई विकल्प सामने आ रहा है और एक.ENT बैकएण्ड आप सामने के अंत में कनेक्शन आईडी सेट कर सकते हैं और यह बैकएण्ड के लिए जाता है. यह आपको एक स्थान में एक निवेदन के सभी लॉगों को देखने देता है. या यदि आप अपने बैकएण्ड में gicient का उपयोग करें...... आप शीर्ष सेवा को शीर्ष में कर सकते हैं.

आप यह कैसे कर सकते हैं इस पर बहुत विस्तार है: httpshshyf. seps/ asssss-p-s-s-p-p---st---st-----st----out-से-से-C-से-से-से-से-से-से-पर-लेकिन मैं इसे एक भविष्य पोस्ट में कवर होगा.

स्ट्रक्चर्ड लॉग

स्ट्रक्चर्ड लॉगिंग का तरीका है जिससे आपकी लॉग्स को ढूंढने और फ़िल्टर करने का आसान तरीका बनता है. सेरियर में आप यह कर सकते हैं का उपयोग करके Log.Information("This is a log message with {Property1} and {Property2}", property1, property2); सिंटेक्स. यह किसी खास संपत्ति के साथ लॉग के लिए खोज करना आसान बनाता है.

कॉन्टेक्स्ट लॉगिंग

सेरआईलॉग का उपयोग कर आप भी इस्तेमाल कर सकते हैं LogContext.PushProperty अपने लॉगों के लिए गुण जोड़ने के लिए जो केवल एक विशेष स्कोप के लिए मायने रखते हैं. यह आपके अनुप्रयोग में समस्याओं को हल करने में बहुत उपयोगी हो सकता है.

सेरेसिलॉग सेटअप

सेरिएल में यह बहुत कुछ है कि यह आपको कोड में तथा कॉन्फ़िग के माध्यम से इसे कॉन्फ़िगर करने देता है. उदाहरण के लिए कि आपके ऊपर के कॉन्फ़िगरेशन को प्रयोग करने के लिए यह:

builder.Host.UseSerilog((context, services, configuration) =>
{
    configuration
        .MinimumLevel.Warning()
        .Enrich.FromLogContext()
        .Enrich.WithThreadId()
        .Enrich.WithThreadName()
        .Enrich.WithProcessId()
        .Enrich.WithProcessName()
        .WriteTo.Seq("http://seq:5341", apiKey: "")
        .WriteTo.Console()
        .WriteTo.File("logs/applog-.txt", rollingInterval: RollingInterval.Day)
        .Enrich.WithProperty("ApplicationName", "mostlylucid");
});

यह ऊपर दिए विन्यास के रूप में है परंतु कोड में. यह उपयोगी है यदि आप कोड में अपना लॉगिंग सेट करना चाहते हैं; यह वास्तव में आपके लिए है कि आप यह कैसे करते हैं.

एक्सेप्शन फ़िल्टर्स

शायद आप एक्सेप्शन फिल्टरों का उपयोग करके उन्हें पकड़ने के लिए कर सकते हैं. यह आपके अनुप्रयोग में सभी अपवादों को सुनिश्चित करने का एक महान तरीका है. कैसे कभी यह विधि स्तर लॉगिंग के लिए एक प्रतिस्थापित नहीं है; आप अभी भी विधि स्तर पर लॉग करना चाहिए ताकि आप देख सकते हैं कि आपके आवेदन में क्या हो रहा है, सिर्फ फ़िल्टर दिखाता है कि क्या होता है एक बार पूरी मांग ढेर अभ्यित किया गया है और अक्सर बाहर काम करने के लिए परेशान हो सकता है क्या हुआ है.

यह एक गुप्त में बदल गया है. कोर 8 और वहाँ एक शीर्ष आप इन के साथ कर सकते हैं नई विशेषताएँ.

बग फिर वही सिद्धांत लागू होते हैं; आपको विधि स्तर पर लॉग करना चाहिए ताकि आप देख सकें कि आपके अनुप्रयोग में क्या हो रहा है.

हर बात को गैरत मत करो

वातावरण के लिए लॉग उचित होना चाहिए; विकास में सब कुछ आप देख सकते हैं कि आपके अनुप्रयोग में क्या हो रहा है लेकिन जाँच में आपको कम लॉगिंग की आवश्यकता होगी (जब आपका लॉग हो रहा हो) तथा उत्पादों में आपको कम चेतावनी की आवश्यकता होगी तो आप कम चेतावनी की आवश्यकता होगी.

यह सब कुछ उत्पादन में लेने के लिए प्रलोभित है लेकिन यह एक बुरा विचार है. आप एक समस्या का पता लगाने की जरूरत है सब कुछ ले लेना चाहिए लेकिन फिर नहीं. बादल प्रबंधन में आप डेटा की मात्रा के लिए आसानी से चार्ज मिल सकते हैं जो आप लॉगिंग सेवा के लिए भेजा जा सकता है ताकि आप लॉग के बारे में सावधान रहें और कितने समय तक इन लॉग को डिफ़ॉल्ट से सुरक्षित रखें; यह प्रायः प्रति दिन लॉग के लिए है और जब तक कि डाटा भंडारित है तब तक आप खर्च करेंगे.

एक बहुत ही एजुए 'के लिए आप सिर्फ उस डेटा के लंबे समय तक लॉगिंग की आवश्यकता नहीं होगी; आप के लिए एक अच्छा विचार होगा लॉग के पिछले कुछ दिनों से ऐप में क्या हो रहा है।

अनुरोध किया जा रहा है

एक बार जब मैं उत्पादन में देखता हूँ तो लॉगिंग निवेदन असफल हो जाता है; जबकि ये दिलचस्प हो सकते हैं (कोई नहीं चाहता कि एक ४०४ / ४०१) ये बहुत अधिक डाटा हो सकते हैं और जमा करने के लिए बहुत महँगा भी हो सकता है. आपको केवल लॉग चीजों को ही करना चाहिए आप ठीक करना चाहते हैं404 के लिए यह ज़रूरी हो सकता है कि यह आपके अनुप्रयोग में एक टूटी हुई कड़ी सूचित करे; क्योंकि यह 401 हो सकता है कि यह एक टूटी हुई सत्यापन प्रणाली को सूचित कर सकता है ।

मैं इन ऊपर उल्लेख किया गया है कि कैसे कभी वे वास्तव में किया जाता है कोड में अच्छी तरह से लिया जाता है ( 401) के मामले में; यह हो सकता है कि ये भी एक के रूप में लॉग किया जाना चाहिए Warning या Error कोड जो वास्तव में 401 उत्पन्न करता है.

सेर लॉग में अनुरोधिंग को सेट करने के लिए आप यह कर सकते हैं:

app.UseSerilogRequestLogging();

यह आपके अनुप्रयोग के लिए सभी अनुरोधों का उपयोग करेगा, यह देखने का महान तरीका है कि आपके अनुप्रयोग में क्या हो रहा है एक उच्च स्तर पर, लेकिन फिर आप क्या लॉग लॉग और आप के लिए इन लॉग रखने के बारे में सावधान रहना चाहिए.

अनुप्रयोग इंसाइट ऑन द स्क्रिप्चर्स के लिए आप अभी भी जानकारी स्तर का उपयोग करना चाहते हैं क्योंकि यह आपको nifyymon user सुविधा देता है; यह एक महान तरीका है कि कैसे उपयोक्ता आपके अनुप्रयोग का उपयोग कर रहे हैं और समस्याओं में बहुत उपयोगी हो सकते हैं; हालांकि इन जल्द ही इन जोखिमों के खर्चों के बारे में सावधानी रखना चाहिए आप क्या कर रहे हैं और आप इन लॉगों के लिए कितने समय तक बनाए रखना चाहिए.

ऑन्टियम

तो यह है कि यह एक त्वरित चलाने के लिए कैसे एनईएस में लॉग करने के लिए। यह काफी अधिक से अधिक जोश के लिए प्रतिक्रिया है, बेकार लॉग मैं कई उत्पादन अनुप्रयोगों में देख रहे हैं. विकास में जिसे आप देखना चाहते हैं कैसे एक ए. डी.; उत्पादन में जिसे आप देखना चाहते हैं ऐ रसूल तुमको क्या हो गया है कि जहन्नुम की तरफ दौड़े चले जाते हैं. बातचीत अकसर अनुप्रयोग विकास का एक बेकार, महँगी हिस्सा होती है । सॉफ्टवेयर विकास में कुछ भी के साथ लॉगिंग के दौरान अमेरिका के लिए ध्यान केंद्रित किया जाना चाहिए; चाहे इसका आप / अन्य विकासकर्ता अपने ID / स्थानीय रूप से ऐप्टर पर काम कर रहे हों या बड़ी तेज़ी से और तेजी से उत्पादन में समस्याओं को सुलझा रहे हों.

logo

©2024 Scott Galloway