11

मेरे पास एएसपी.नेट कोर वेब एपीआई प्रोजेक्ट है। अब मैं लॉग त्रुटियों और घटनाओं को लॉग करना चाहता हूं। मैंने पहले अपनी परियोजना में ELMAH का उपयोग किया था, लेकिन ऐसा लगता है कि एल्मह एएसपी.NET कोर के लिए उपलब्ध नहीं है। माइक्रोसॉफ्ट द्वारा प्रदान की गई डिफ़ॉल्ट लॉगिंग सेवा को कॉन्फ़िगर करने के लिए मैंने this Official link को संदर्भित किया। मैं कहीं भी नहीं देख सकता हूं कि मैं इन लॉग को टेक्स्ट फ़ाइल या डेटाबेस में कैसे सहेज सकता हूं।एएसपी.नेट कोर 1.0 लॉगिंग

यदि एएसपी.नेट कोर में पहले से ही डिफ़ॉल्ट लॉगिंग कार्यक्षमता है, तो मुझे आश्चर्य है कि मुझे अन्य टूल जैसे elmah, log4net का उपयोग क्यों करना चाहिए। तो फिर जब मैंने आलेख की खोज की जो डीबी में या पाठ फ़ाइल में लॉग को सहेजने के लिए डिफ़ॉल्ट लॉगिंग लागू करता है, तो मुझे कोई नहीं मिला। क्या कोई तरीका है कि हम लॉगिंग के लिए समर्थन में निर्मित ASP.NET कोर का उपयोग करके फ़ाइल में लॉग कैसे सहेज सकते हैं?

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

लॉग फ़ाइल Serilog का उपयोग कर:

लॉग्स Seq का उपयोग कर प्रदर्शित किया: enter image description here

उत्तर

5

डिफ़ॉल्ट रूप से ASP.NET कोर लॉगिंग मानक नेट कोर के आधार पर करता है, तो abstractions और कहा abrasctions के लिए कार्यान्वयन। link जो आप प्रदान करते हैं वह वही है जो आप लॉगिंग सेवाओं का उपभोग करने के लिए अनुसरण करना चाहते हैं। ये मानक आउटपुट (आउटपुट विंडो) को लिखेंगे उदाहरण के लिए जब डिबगिंग।

जो भाग आप विशेष रूप से ढूंढ रहे हैं वह web.config है। निम्नलिखित पर विचार करें:

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <system.webServer> 
    <handlers> 
     <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" 
      resourceType="Unspecified" /> 
    </handlers> 
    <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" 
       forwardWindowsAuthToken="false" stdoutLogEnabled="true" 
       stdoutLogFile="C:\temp\logs\log.log" /> 
    </system.webServer> 
</configuration> 

आप stdoutLogEnabled and stdoutLogFile के लिए देख रहे हैं।

अगर सही है तो stdout और प्रक्रिया processPath में निर्दिष्ट stdoutLogFile में निर्दिष्ट फ़ाइल पर पुनः निर्देशित किया जाएगा के लिए stderr stdoutLogEnabled।

और

stdoutLogFile के लिए रिश्तेदार या पूर्ण फ़ाइल पथ जो stdout और stderr प्रक्रिया processPath में निर्दिष्ट से लॉग इन किया जाएगा निर्दिष्ट करता है। सापेक्ष पथ साइट की रूट के सापेक्ष हैं। 'रूट' से शुरू होने वाला कोई भी पथ साइट रूट के सापेक्ष होगा और अन्य सभी पथ को पूर्ण पथ के रूप में माना जाएगा।

इसके अलावा ASP.NET कोर मॉड्यूल पर जानकारी के लिए Publishing to IIS देखते हैं।

+0

समाधान संरचना में लॉग इन करने के लिए फ़ोल्डर को जोड़ना न भूलें और इसे प्रकाशित करें। Project.json https://docs.asp.net/en/latest/hosting/directory- structure.html। बस यह किया और महान काम करता है और तारीख आधारित नामकरण सम्मेलन (जैसे stdout_8440_201691620225.log) वाली फ़ाइलों का नाम देता है। बॉक्स से थोड़ा सा वर्बोज़, लेकिन इसे tweaked किया जा सकता है। –

2

एएसपी.नेट कोर का लॉगिंग उपप्रणाली अभी तक एक फ़ाइल लॉगर प्रदान नहीं करता है, हालांकि creating one is being discussed

लेखन के समय, इस उद्देश्य के लिए सेरिलोग या एनएलओजी का उपयोग करने का तरीका है।

+0

और Serilog.Sinks.MSSqlServer एएसपीनेट कोर के साथ काम करता है। सबसे पुराना बीटा संस्करण स्थापित करना सेरिलोग संस्करण <2.0 की अपेक्षा करता है। –

2

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

एएसपी.नेट लॉगिंग अभी भी नया है, क्यों अन्य ढांचे और गंतव्यों के लिए लॉगर्स दिखने लगेंगे। मुझे यकीन है कि फाइल आधारित लॉगिंग जल्द ही लागू की जाएगी और ईएलएमएएच को निश्चित रूप से एएसपी.नेट कोर को भी भेजा जाएगा। अधिक जानकारी के लिए, मेरा ब्लॉग पोस्ट देखें: ASP.NET Core Logging Tutorial

1

मैंने एएसपी.NET कोर लॉगिंग पर ब्लॉग पोस्ट के लिए इस विषय पर अभी भी शोध का एक गुच्छा किया है। मैंने अंतर्निहित लॉगिंग के साथ-साथ एनएलओजी, सेरीलॉग और लॉग 4नेट को देखा।

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

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

सेरिलोग के विस्तार के लिए कोड की एक पंक्ति की आवश्यकता होती है और यह फ़ाइल लॉगिंग जोड़ती है। आप इसके बारे में यहाँ पढ़ सकते हैं: https://github.com/serilog/serilog-extensions-logging-file

यहाँ ASP.NET कोर प्रवेश के बारे में अपने ब्लॉग पोस्ट है अगर यह मदद करता है: https://stackify.com/asp-net-core-logging-what-changed/

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

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