2017-02-03 12 views
5

मेरे पास कई वर्कर रोल प्रोजेक्ट हैं जो मैं लॉग लॉगनेट कार्यक्षमता का उपयोग जानकारी लॉग करने के लिए करना चाहता हूं। दुर्भाग्य से मेरे लॉग में से कोई भी वास्तव में मेरी आउटपुट विंडो में दिखाई नहीं दे रहा है।वर्कररोल लॉग 4नेट ट्रेस एपेंडर लॉग आउटपुट विंडो में दिखाई नहीं दे रहे हैं

मैं डिबगर में एक लॉग लाइन पर कदम है, और उत्पादन खिड़की के बजाय निम्न पंक्ति बाहर थूक:

'WaWorkerHost.exe' (CLR v4.0.30319: RdRuntime): लोडेड 'सी: \ WINDOWS \ Microsoft.Net \ विधानसभा \ GAC_MSIL \ System.Runtime.Caching \ v4.0_4.0.0.0__b03f5f7f11d50a3a \ System.Runtime.Caching.dll '। छोड़े गए लोडिंग प्रतीकों। मॉड्यूल अनुकूलित किया गया है और डीबगर विकल्प 'जस्ट माई कोड' सक्षम है।

यह देखकर कि यह मेरा कोड है, मैं बहुत उलझन में हूं कि मैं यह अपवाद क्यों देख रहा हूं। नीचे मेरी लॉगिंग app.config सेटिंग्स है:

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="Montetary.Agents.HappyBirthday.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    </configSections> 
    <system.diagnostics> 
    <trace> 
     <listeners> 
     <add type="Microsoft.WindowsAzure.Diagnostics.DiagnosticMonitorTraceListener, Microsoft.WindowsAzure.Diagnostics, Version=2.8.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" name="AzureDiagnostics"> 
      <filter type="" /> 
     </add> 
     </listeners> 
    </trace> 
    </system.diagnostics> 
    <log4net> 
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- can be any pattern you like --> 
     <conversionPattern value="%logger - %message" /> 
     </layout> 
    </appender> 
    <!-- does not have to be at the root level --> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="AzureTraceAppender" /> 
    </root> 
    </log4net> 

मैं इस question में उदाहरण का अनुसरण करने का प्रयास किया, लेकिन परिणाम एक ही

+0

जहां आप लॉग देखने की कोशिश कर रहे हैं? वे विजुअल स्टूडियो आउटपुट विंडो में दिखाई नहीं देंगे। आपको भंडारण खाते से कनेक्ट करने और तालिका में "WADLogsTable" –

+0

तालिका में देखने की आवश्यकता है, जो मैंने पढ़े हैं, ट्रेसपेंडर को लॉगिंग करते समय आउटपुट विंडो पर लिखना चाहिए: http://interactivelogic.net/wp/2010/02/aspnet -logging-to-output-window-with-log4net/ –

+0

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

उत्तर

-1

मैं प्राप्त करने में सक्षम था।

कार्यकर्ता भूमिका (लक्ष्य ढांचा: .NET Framework 4.5.2) के साथ एक Azure सेवा बनाई और कार्यकर्ता भूमिका में log4net संस्करण 2.0.7 स्थापित किया।

app4config में निम्न के रूप में log4net के लिए निम्न अनुभाग कॉन्फ़िगरेशन जोड़ा गया।

<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 

और log4net अनुभाग निम्नानुसार दिखता है।

<log4net> 
    <appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
     <layout type="log4net.Layout.PatternLayout"> 
     <!-- can be any pattern you like --> 
     <conversionPattern value="%logger - %message%newline"/> 
     </layout> 
    </appender> 
    <!-- does not have to be at the root level --> 
    <root> 
     <level value="ALL"/> 
     <appender-ref ref="AzureTraceAppender"/> 
    </root> 
</log4net> 

अब तक मैंने जो कुछ किया है वह वही है जैसा आपने अपनी कॉन्फ़िगरेशन फ़ाइल में कॉन्फ़िगर किया है।

WorkerRole.cs की OnStart विधि

log4net.Config.XmlConfigurator.Configure(); 

WorkerRole.c में श्रेणी स्तर पर निम्नलिखित के रूप में कार्यकर्ता की भूमिका के लिए लकड़हारा बनाएं की पहली पंक्ति में

कॉन्फ़िगर log4net

private readonly ILog logger = LogManager.GetLogger("WorkerRole"); 

में प्रवेश करने की कोशिश की जानकारी ऑनस्टार्ट, ऑनस्टॉप, रन और रनएसिंक मेटाथोड्स।

//In OnStart 
logger.Info("From log4net : WorkerRole1 has been started"); 

//In OnStop 
logger.Info("From log4net : WorkerRole1 has stopped"); 

//In Run 
logger.Info("WorkerRole1 is running"); 

//In RunAsync 
logger.Info("From log4net : Working"); 

WorkerRole विकास Storate खाते की ओर इशारा करते चल रहा है, निम्नलिखित के रूप में उत्पादन विंडो में लॉग प्रविष्टियों का प्रदर्शन किया। ट्रेस द्वारा लिखी गई प्रविष्टियों को अलग करने के लिए, मैंने प्रविष्टियों को "लॉग 4नेट से" से पूर्ववत किया है।

WorkerRole: WorkerRole - From log4net : WorkerRole1 has been started 

WaWorkerHost.exe Information: 0 : From log4net : WorkerRole1 is running 

WorkerRole: WorkerRole - From log4net : Working 

enter image description here

मुझे लगता है कि हिस्सा आप अपने कोड में अनुपलब्ध हो सकता है OnStart में log4net को विन्यस्त हो सकता है। जब मैंने OnStart विधि से log4net.Config.XmlConfigurator.Configure(); को हटा दिया, तो आउटपुट विंडो में लॉग 4नेट से प्रविष्टियां दिखाने से रोक दिया गया।

+0

तथ्य यह है कि TraceAppender पहले ही आउटपुट विंडो में लिखता है, इसलिए मैं अपनी कॉन्फ़िगरेशन में जटिलता की मात्रा को कम करने की कोशिश कर रहा हूं। जब मैं माइक्रोसॉफ्ट द्वारा निर्मित ट्रेस टूल का उपयोग करता हूं, आउटपुट विंडो में विवरण दिखाता है। मेरी समझ में Log4net का AzureTraceAppender केवल डायग्नोस्टिक सिस्टम के माध्यम से एक पास है, इसलिए इसे आउटपुट विंडो में स्वचालित रूप से दिखाई देना चाहिए। log4net का AzureTraceAppender बस टूटा हुआ है। –

+0

मुझे लगता है कि मुझे यह तरीका मिल रहा है जिस तरह से आप चाहते हैं। मुझे कुछ समय दें मैं अपना जवाब अपडेट करूंगा। –

+0

मैंने अपना जवाब अपडेट किया। इससे आपको समस्या को हल करने में मदद मिलनी चाहिए। –

1

आप जाँच कर सकते हैं कुछ चीजें हैं:

आप कॉन्फ़िगर log4net इससे पहले कि आप लिखना आप लॉग फ़ाइल के लिए कॉल करें (केवल एक बार पर्याप्त है):

log4net.Config.XmlConfigurator(); 

अगली बात करने के लिए निस्तब्धता को जोड़ने के लिए है आपकी कॉन्फ़िगरेशन:

<appender name="AzureTraceAppender" type="log4net.Appender.TraceAppender"> 
    <param name="ImmediateFlush" value="true" /> 
    <layout type="log4net.Layout.PatternLayout"> 
    <!-- can be any pattern you like --> 
    <conversionPattern value="%logger - %message" /> 
    </layout> 
</appender> 

यह तुरंत संदेश को फ्लश करेगा।

सुनिश्चित करें कि आपने डीबगिंग के लिए सभी जानकारी में Azure डायग्नोस्टिक्स को कॉन्फ़िगर किया है।

फिर आप आंतरिक लॉग 4नेट डीबगिंग डीबगिंग सक्षम कर सकते हैं। internal debugging on this log4net faq page देखें। मानक यह आपके श्रोता को लॉग इन करना चाहिए जिसे आपने कॉन्फ़िगर किया है। ट्रेस तत्व के लिए autoflush = "true" विकल्प जोड़ें। या उस कार्यकर्ता की भूमिका पर निर्देशिका खोजें जिसे आप लिख सकते हैं और अपने लॉग पढ़ने के लिए उपयोग कर सकते हैं।

+0

धन्यवाद पीटर, मैं आउटपुट विंडो –

+0

पर आउटपुट चलाता हूं, यह देखने के लिए मैं तत्काल फ्लैश का उपयोग करने की कोशिश करूंगा कि मैंने XmlConfigurator को assemblyinfo में जोड़ा है, और तत्काल फ्लश, लेकिन कोई पासा शामिल नहीं है, अभी भी काम नहीं करता है। मैंने log4net को हटा दिया है, और अब मैं डायग्नोस्टिक टूल्स का उपयोग कर रहा हूं, जो काम कर रहा है। –

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