2011-01-06 10 views
11

मैं एक क्लास लाइब्रेरी में लॉगिंग फ़ंक्शन को कार्यान्वित करना चाहता हूं, जिसे स्वयं एक webservice में संदर्भित किया जाता है। मैंने app.config जोड़ने की कोशिश की और सब कुछ जरूरी किया, लेकिन ऐसा लगता है कि जब एक अपवाद फेंक दिया जाता है, तो log4net बस कुछ भी नहीं करता है।कक्षा पुस्तकालय के लिए log4net कैसे शामिल करें?

मेरी app.config

<configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/> 
    </configSections> 
    <log4net> 
    <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> 
     <file value="D:\\mylogfile.txt" /> 
     <appendToFile value="true" /> 
     <rollingStyle value="Size" /> 
     <maxSizeRollBackups value="5" /> 
     <maximumFileSize value="10MB" /> 
     <staticLogFileName value="true" /> 
     <filter type="log4net.Filter.StringMatchFilter"> 
     <stringToMatch value="test" /> 
     </filter> 
     <filter type="log4net.Filter.StringMatchFilter"> 
     <stringToMatch value="error" /> 
     </filter> 
     <filter type="log4net.Filter.DenyAllFilter" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="%date [%thread] %level %logger - %message%newline%exception" /> 
     </layout> 
    </appender> 
    <root> 
     <level value="INFO"/> 
     <appender-ref ref="RollingFileAppender"/> 
     <appender-ref ref="ConsoleAppender" /> 
    </root> 
    </log4net> 
AssemblyInfo.cs में

:

[assembly: log4net.Config.XmlConfigurator(ConfigFile = "app.config")] 
LogManager.cs में

:

private static readonly ILog Log = log4net.LogManager.GetLogger 
      (MethodBase.GetCurrentMethod().DeclaringType); 
public static void WriteLog(Exception ex) 
{ 
    Log.Error(ex); 
} 

आप मुझे बता सकते हैं कि क्या गलत है? मैं अपनी कक्षा पुस्तकालय के लिए लॉग 4नेट कैसे काम कर सकता हूं?

धन्यवाद

+0

कैसे करता है जहाँ आप WRITELOG कॉल कर रहे हैं की तरह कोड देखो? –

+0

बीटीडब्ल्यू, क्या आपने रूट पर अपना स्तर सेट करने की कोशिश की है, और अपने रोलिंगफाइलएपेंडर पर उन सभी फ़िल्टर को हटाने का प्रयास करें। –

+0

@Pauli: मैंने कोशिश की के रूप में आप का सुझाव दिया, यह अभी भी :) – Vimvq1987

उत्तर

1

कृपया निम्नलिखित प्रश्न करने के लिए मेरा उत्तर देखें:

Use log4net in SDK

यह एक लॉग विन्यास दिनचर्या है कि एक log4net config फाइल करने के लिए एक पूर्ण पथ का निर्माण होगा। जैसा कि आप एक webservice में हैं, यह नहीं देख रहा है कि आप "app.config" के लिए कहां से उम्मीद करते हैं।

इसके अलावा

यकीन है कि तुम 'डी: \ mylogfile.txt "लिखने के लिए अनुमति ले ली है अपने वेब सेवा से।

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/17881155) –

6

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

3

आप इंजेक्शन किसी तरह का इस्तेमाल कर सकते हैं, या तो आप एक सरल एक तरह का निर्माण:

public interface ILogger 
{ 
    void LogInfo(string message); 
     . 
     . 
     . 
} 

और फिर तुम सिर्फ कुछ है कि है कि इंटरफ़ेस से मेल खाता है, log4net या इस तरह के लिए एक आवरण की तरह इंजेक्षन।

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

+0

@ थॉमस मैं फिर से सहमत हूं। एक अमूर्तता का उपयोग करके, लेकिन कई अच्छे कारण हैं कि आप लाइब्रेरी को लॉग इन क्यों कर सकते हैं उदा।निदान और लेखा परीक्षा। यदि लाइब्रेरी में कुछ गड़बड़ है, तो नैदानिक ​​होने पर एक अच्छी बात हो सकती है। –

+0

@ चतुरता: मेरा नाम टॉमस थॉमस नहीं है;)। इसके अलावा मैं उन पहलुओं में आपसे सहमत हूं, लेकिन मुझे लगता है कि इसे कम से कम रखा जाना चाहिए। यदि लाइब्रेरी में कुछ गलत है तो अपवाद को बताना चाहिए, और यह ढेर में उच्च लॉग हो सकता है। एक आदर्श दुनिया में एक पुस्तकालय एक तीसरी पार्टी होनी चाहिए (लेकिन आप भी तीसरा हिस्सा हो सकते हैं) जिसे "किया जाना चाहिए"। या आप किसी अन्य प्रकार की "त्रुटियों" के बारे में बात कर रहे हैं? त्रुटियां जो अपवाद नहीं फेंकती हैं? –

+0

वर्तनी नाम के लिए खेद है :) मैं ऐसी जानकारी का जिक्र कर रहा हूं जो उन समस्याओं का विश्लेषण करने में मदद कर सकता है जो अपवादों का कारण नहीं बन सकते हैं। यहां तक ​​कि उन मामलों में जहां अपवाद हैं, अक्सर त्रुटि के कारण होने वाली स्थितियों को देखने के लिए आसपास के डायग्नोस्टिक जानकारी के लिए उपयोगी होता है। यह उत्पादन में विशेष महत्व हो सकता है जहां क्रूर और असामान्य तरीकों से सॉफ्टवेयर का उपयोग किया जा सकता है;) –

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