2009-10-22 5 views
13

के लिए log4net को कॉन्फ़िगर कैसे करें मेरे पास एक विंडोज सेवा है जहां app.config फ़ाइल और log4net.config फ़ाइलें अलग हैं। लॉगिंग काम नहीं कर रहा है।सी # विंडोज सेवा

मेरी app.config फ़ाइल में, मैं अनुभाग में निम्न है:

<add key="log4net.Config" value="log4net.config"/> 

यह काम करता है, तो मूल्य में मैं log4net.config फाइल करने के लिए एक पूर्ण पथ निर्दिष्ट।

क्या मुझे log4net.cong पर एक पूर्ण पथ प्रदान करने की आवश्यकता है? Log4net.config और app.config फ़ाइल दोनों निष्पादन योग्य के समान फ़ोल्डर में हैं।

कोई विचार?

पराग

उत्तर

21

हो सकता है कि यह उपयोगी है (Moving your Log4Net configuration out of web.config with ASP.NET 2.0 web sites।)।

यहाँ भागों है कि आप रुचि हो सकती है कर रहे हैं:

आवेदन बताओ यह कॉन्फ़िग फ़ाइल का उपयोग कर log4net कॉन्फ़िगर करने के लिए। इसके लिए वास्तव में दो स्पॉट हैं। सबसे पहले, global.asax और assemblyInfo.cs फ़ाइल। नोट, उस समय के जब आप global.asax फ़ाइल के साथ सभी कोड इनलाइन के साथ शुरू करेंगे। किसी भी कारण से, केवल जिस तरह से मैं इसे काम पर ला सकता था कोड-बैक का उपयोग करने के लिए वैश्विक.एक्सएक्स को तोड़ने के लिए और फिर assemblyInfo.cs फ़ाइल को गधे लगाएं। तो यह इस तरह दिखने समाप्त होता है।

Global.asax: <% @ आवेदन भाषा = "सी #" Inherits = "GlobalAsax"%> global.asax.cs (अपने App_Code फ़ोल्डर में):

using System; 
using System.Web; 

public class GlobalAsax : HttpApplication 
{ 
    // you may have lots of other code here 
    void Application_Start(object sender, EventArgs e) 
    { 
     log4net.Config.XmlConfigurator.Configure(); 
    } 
} 

अब कि आपके पास लॉगिंग लॉग 4नेट की कॉन्फ़िगरेशन है, तो आप अपनी असेंबली जानकारी में एक विशेषता सेट कर सकते हैं ताकि log4net जानता हो कि कॉन्फ़िगरेशन फ़ाइल को कहां देखें। AssemblyInfo.cs (अपने App_Code फ़ोल्डर में):

[assembly:log4net.Config.XmlConfigurator(ConfigFile = "log4net.config", Watch = true)]

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

सुनिश्चित करें कि log4net.config हमेशा वहाँ है बनाने के लिए, csproject को log4net.config जोड़ने के लिए, और CopyAlways पर सेट करें। इसे डीबग फ़ोल्डर में प्रस्तुत किया जाना चाहिए।

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

+1

मैं सिर्फ http://mitch-wheat.blogspot.com/2007/04/ से जानकारी के साथ ऐसा करने में कामयाब रहे:

वैकल्पिक रूप से, आप XmlConfigurator.Configure() कॉल करने से पहले निम्न कर सकते हैं log4net-net-logging-tool.html लेकिन अब मुझे समस्या है कि सेटअप स्थापित होने पर सेटअप porject log4net.config फ़ाइल में प्रतिलिपि नहीं करेगा। मैं अपने सेटअप प्रोजेक्ट में log4net.config फ़ाइल कैसे प्राप्त कर सकता हूं? –

+3

मेरे दोस्त, अगर मैं कर सकता तो मैं आपको 1000 अंक दूंगा। शुक्रवार की रात है, मैं घर जाना चाहता हूं, और कंसोल ऐप के रूप में चलाने पर मेरी बेवकूफ सेवा लॉगिंग कर रही थी, लेकिन सेवा पैनल से शुरू नहीं होने पर। और यह [असेंबली] विशेषता थी जो गायब थी। धन्यवाद। –

+2

मैं कंसोल ऐप्स के लिए केवल असेंबली विशेषता का उपयोग करता था, लेकिन ऐसा लगता है कि विंडोज सेवाओं को 'log4net.Config.XmlConfigurator.Configure();' लाइन और असेंबली विशेषता दोनों की आवश्यकता है। – keremispirli

13

विंडोज सेवा के लिए वर्तमान निर्देशिका विंडोज \ system32 है - और XmlConfigurator.Configure() FileInfo का उपयोग करता है जो वर्तमान निर्देशिका से संबंधित सापेक्ष पथ का इलाज करता है। तो log4net विंडोज़ \ system32 में इसकी कॉन्फ़िगरेशन फ़ाइल की तलाश में है।

दूसरी ओर XmlConfiguratorAttribute एप्लिकेशन की बेस डायरेक्टरी का उपयोग करता है, यही कारण है कि यह हमेशा काम करता है।

System.IO.Directory.SetCurrentDirectory (AppDomain.CurrentDomain.BaseDirectory); 
+0

यह मेरे लिए एक बहुत ही उपयोगी टिप्पणी थी! धन्यवाद। –

+0

यहां एक ही समस्या है और आधार पथों के बारे में जानकारी का यह गड़बड़ महत्वपूर्ण था। धन्यवाद। – xan