2010-06-29 2 views
7

मेरे पास एक कंसोल ऐप है जिसे मैं विंडोज़ सेवा में परिवर्तित कर रहा हूं। कंसोल ऐप के रूप में मेरा लॉग 4नेट लॉगिंग ठीक काम कर रहा है। लेकिन इसे विंडोज़ सेवा में परिवर्तित करना, मेरे लॉग 4नेट लॉगिंग ने काम करना बंद कर दिया है।log4net विंडोज़ सेवा में काम नहीं कर रहा है

मैं सेवा परियोजना में मेरी AssemblyInfo.cs को यह जोड़ लिया है:

private static log4net.ILog _log = log4net.LogManager.GetLogger(System.Reflection.MethodBase.GetCurrentMethod().DeclaringType); 
     private Builder _builder; 

     public YCSWebServerService() 
     { 
      InitializeComponent(); 
      _builder = new Builder(); 
     } 

     protected override void OnStart(string[] args) 
     { 
      _log.Info("YCSWebServerService started"); 
      _builder.Start(); 
     } 

     protected override void OnStop() 
     { 
      _log.Info("YCSWebServerService stopped"); 
      _builder.Stop(); 
     } 

मैं एक "विशिष्ट" है log4net config:

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

यह onStart और onstop के साथ मेरी सेवा वर्ग है फ़ाइल मेरी सेवा प्रोजेक्ट में जोड़ा गया:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 

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

    <log4net> 
    <root> 
     <level value="ALL" /> 
     <appender-ref ref="EventLogAppender" /> 
    </root> 
    <appender name="EventLogAppender" type="log4net.Appender.EventLogAppender"> 
     <threshold value="DEBUG" /> 
     <applicationName value="Lantic YCS WebServer" /> 
     <layout type="log4net.Layout.PatternLayout"> 
     <conversionPattern value="(%-5level %date{hh}:%date{mm}:%date{ss} [%thread] %logger [%property{NDC}]) %message %n" /> 
     </layout> 
    </appender> 
    </log4net> 

</configuration> 

कोई विचार या सुझाव?

+0

मैंने इस समस्या को हल किया एपेंडर को ओवरराइड करके। इस समस्या की जांच करें: http://stackoverflow.com/questions/1922430/how-do-you-make-log4net-output-to-current-working-directory/1922805#1922805 – RClemens

उत्तर

1

कुछ बातें की कोशिश करने के लिए:

उपयोगकर्ता सेवा चल रही है लिखने की अनुमति है?

क्या कोई भी अपवाद विंडोज लॉग में लॉग इन हो रहा है?

क्या आपने डीबग मोड में सेवा चलाने का प्रयास किया है यह देखने के लिए कि क्या Log4net कोई अपवाद फेंक रहा है?

+0

EventLogAppender नहीं होगा अपवाद फेंक दें, log4net के लिए एक त्रुटि हैडलर है। डिफ़ॉल्ट रूप से यह त्रुटि हैंडलर Console.Error.WriteLine और Trace.WriteLine के पहले अपवाद पर अपवाद लिखता है। सभी आगे की घटनाओं को अनदेखा कर दिया जाता है। आप अपने त्रुटि हैंडलर का उपयोग कर सकते हैं जैसे कि इस आलेख के नीचे: http://blogs.myfirstsharepoint.de/archive/2009/06/02/aus-der-praxis-%E2%80%93-securityexception-beim-loggen-mit-eventlogappender-von-log4net। जैसा पीएक्स (लेख जर्मन में है, लेकिन यह कोड को नुकसान नहीं पहुंचाता है, है ना?) – Hinek

1

https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=293617

http://social.msdn.microsoft.com/Forums/en-US/windowsgeneraldevelopmentissues/thread/5bef59bc-a28f-4e6d-8ddb-730e12764162

Windows Vista में, Windows XP सपा 2, विंडोज सर्वर 2003, 2008 और विंडोज 7 एक उपयोगकर्ता सुरक्षा के लिए लॉग का उपयोग करने की व्यवस्थापक अधिकार की जरूरत है। अब जब log4net इवेंट लॉग स्रोत बनाने का प्रयास करता है, तो सभी लॉग चेक किए जाते हैं यदि यह पहले से मौजूद है। तो विंडोज सेवा के साथ, विंडोज सर्वर के उपयोगकर्ता को प्रशासक अधिकारों की आवश्यकता होगी (जो अच्छा नहीं है)।

समाधान: log4net विन्यास में एक स्पष्ट स्रोत कॉन्फ़िगर (जैसा कि तुमने किया था: <applicationName value="Lantic YCS WebServer" />, Lantic YCS वेबसर्वर अपने स्रोत है) और आप सेटअप में इस स्रोत बनाने (क्योंकि सेटअप-उपयोगकर्ता व्यवस्थापक अधिकार होना चाहिए)।

+0

मेरे उपयोगकर्ता खाते में प्रशासन अधिकार हैं, और अभी भी कोई परिणाम नहीं है। मैं यह समझने में सक्षम नहीं हूं कि मेरी कॉन्फ़िगरेशन में एक स्पष्ट स्रोत को परिभाषित करके आप क्या समझते हैं? क्या आप एक लिंक या एक उदाहरण पोस्ट कर सकते हैं? – lmkk

+0

और मुझे आपके द्वारा पोस्ट किए गए लिंक से कुछ भी नहीं मिला – lmkk

+0

क्षमा करें, कभी-कभी मैं थोड़ा जटिल लिखता हूं। आपने पहले ही एक स्पष्ट स्रोत कॉन्फ़िगर किया है: ... मैंने अपना प्रश्न संपादित किया ... – Hinek

6

क्या आपने अभी अपनी app.config फ़ाइल में लॉग 4नेट अनुभाग जोड़ा है? आपके प्रश्न में आपने बताया है कि आपके पास "विशिष्ट लॉग 4नेट कॉन्फ़िगरेशन फ़ाइल" है, लेकिन आपके द्वारा दिया गया नमूना app.config की पूरी सामग्री जैसा दिखता है।

[assembly: log4net.Config.XmlConfigurator(Watch = true)] 

इसके अलावा जोड़ने requirePermission = मेरी app.config में खंड "गलत" मुझे मदद की है जब मैं के साथ इसी तरह यदि समस्या ठीक log4net: तो app.config मामला है तो आप AssemblyInfo.cs में सरल स्ट्रिंग हो सकता था Windows सेवा के लिए फ़ाइल (अतिरिक्त विशेषता देखने - requirePermission = "false") के लिए प्रवेश करने नहीं:

<configuration> 
    <configSections> 
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false"/> 
    </configSections> 
+0

मेरे लिए काम किया। मैं हमेशा असेंबली हिस्सा भूल जाता हूँ। –

0

खैर यह प्रश्न पूछा गया था लंबे समय पहले, मैं एक सुझाव जो कुछ मदद की किसी को भी एक की तलाश करने के लिए हो सकती है इस मुद्दे का समाधान। यदि आप कंसोल ऐप को विंडोज सेवा में परिवर्तित कर रहे हैं ... तो आपने ऐप इंस्टॉल करने के लिए इंस्टॉलर बनाया होगा। जब आप ऐप इंस्टॉल करते हैं, तो यह आमतौर पर प्रोग्रामफाइल के तहत सेवा के लिए एक इंस्टॉलेशन फ़ोल्डर बनाता है ..... (जब आप अपनी सेवा इंस्टॉल कर रहे हों तो इसे जांचें .. यह आपको इंस्टॉलेशन निर्देशिका का मार्ग देता है)। अगर आपकी web.config फ़ाइल में आपने लॉग फ़ाइल को "लॉग \ लॉग" के रूप में पथ प्रदान किया है।txt ", तो आपके लॉग फ़ाइल (Log.txt) के साथ इंस्टॉलेशन फ़ोल्डर में एक फ़ोल्डर (लॉग) होगा। यदि आप अपने एप्लिकेशन फ़ोल्डर में लॉग फ़ाइल की तलाश में हैं तो आप अपना समय बर्बाद कर रहे हैं।