2010-01-28 15 views
8

पर कोई भी लॉग नहीं लिख रहा है, जहां एक ईएम-मेल भेजने के लिए ई-मेल भेजने के साथ कोई समस्या हल करने के लिए, मुझे सिस्टम का उपयोग करके लॉगिंग सक्षम करने की सलाह दी गई थी। डायग्नोसिस किसी भी त्रुटि को ट्रैक करने के लिए smtp-server के साथ संचार का पता लगाने के लिए .TextWriterTraceListener।सिस्टम के साथ समस्या। डायग्नोसिस .extWriterTraceListener फाइल सिस्टम

<system.diagnostics> 
     <trace autoflush="true" /> 
     <sources> 
     <source name="System.Net" > 
      <listeners> 
      <add name="MyTraceFile"/> 
      </listeners> 
     </source> 

     <source name="System.Net.Sockets"> 
      <listeners> 
      <add name="MyTraceFile"/> 
      </listeners> 
     </source> 
     </sources> 

     <sharedListeners> 
     <add 
      name="MyTraceFile" 
      type="System.Diagnostics.TextWriterTraceListener" 
      initializeData="System.Net.trace.log"    /> 
     </sharedListeners> 

     <switches> 
     <add name="System.Net" value="Verbose" /> 
     <add name="System.Net.Sockets" value="Verbose" /> 
     </switches> 
    </system.diagnostics> 

मैं अपने विकास मशीन पर इसे बाहर की कोशिश की और यह ठीक काम किया: मैं नोड के अंतर्गत मेरी web.config के लिए निम्न जोड़ दिया गया! मैं आसानी से smtp-server के साथ पूरा संचार पढ़ सकता था। हालांकि, उत्पादन वातावरण (विंडोज 2003 सर्वर में आईआईएस 6 पर चल रहा है) पर, यह बिल्कुल काम नहीं करता है। फाइल सिस्टम में कोई लॉग लिखा नहीं जा रहा है। मेरा पहला विचार था कि शायद एएसपी.नेट कार्यकर्ता प्रक्रिया खाता (नेटवर्क सेवा) के पास निर्दिष्ट स्थान पर फाइल सिस्टम को लिखने के पर्याप्त अधिकार नहीं थे। मैंने इसे ठीक किया, लेकिन अभी भी कोई लॉग नहीं मिला। दूसरा, मैंने सोचा कि शायद फ़ोल्डर को "केवल पढ़ने" के लिए सेट किया गया था और साथ ही तय किया गया था। लेकिन फिर भी मुझे कोई लॉग लिखा नहीं है।

क्या किसी को पता है कि समस्या क्या हो सकती है? या शायद कुछ सलाह है कि मैं इसे कैसे ठीक कर सकता हूं? अग्रिम में Thanx!

उत्तर

3

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

अब, अगर सब कुछ वातावरण (विकास और उत्पादन) के लिए ठीक काम करता है, ताकि आप दर्शक में ट्रेस संदेश देख सकें, तो समस्या फ़ाइल सिस्टम और लॉग बचत पर अधिक केंद्रित है।

आपको लगता है कि आपकी लॉग फ़ाइल को सहेजा गया है? उत्पादन वातावरण की बात आती है तो शायद यह एक अलग स्थान है। मुझे लगता है कि विंडोज सर्वर 2003 पर आपको WinDir के तहत कहीं भी अपनी फ़ाइल देखना चाहिए, न कि वेब एप्लिकेशन के फ़ोल्डर में।

जब इस तरह के मुद्दों को डीबग करने की बात आती है, तो मैं आईआईएस के खाते को स्थानीय/डोमेन व्यवस्थापक को बढ़ा दूंगा ताकि यह देखने के लिए कि समस्या हल हो गई है या नहीं। यदि यह हल हो गया है तो यहां एक अनुमति समस्या है।

शुभकामनाएं!

2

क्या यह विकास और उत्पादन में एक ही निर्माण है? अक्सर ट्रैक सशर्त संकलन निरंतर रिलीज मोड में परिभाषित नहीं किया जाता है। तब कोई निशान दिखाई नहीं देगा।

+0

हां यह विकास और उत्पादन दोनों में समान है। मैंने सटीक संस्करण पर ट्रेसिंग सक्षम करके भी सत्यापित किया लेकिन एक अलग उत्पादन वातावरण में, और वहां यह ठीक काम करता था। टिप के लिए धन्यवाद! –

1

क्या आपने Process Monitor का उपयोग करके यह देखने के लिए प्रयास किया है कि System.Net.trace.log फ़ाइल लिखा जा रहा है या यदि कोई त्रुटि उत्पन्न हुई है? क्या यह संभव है कि यह सिर्फ एक अजीब जगह पर लिखा जा रहा है जिसे आप ढूंढ नहीं रहे हैं (मुझे विश्वास है कि डिफ़ॉल्ट एएसपी.NET कार्यकर्ता प्रक्रिया की वर्तमान कार्यशील निर्देशिका होनी चाहिए)।

2

मैं initializeData विशेषता में एक पूरी तरह से योग्य पथ रख कर शुरू होगा:

<add 
     name="MyTraceFile" 
     type="System.Diagnostics.TextWriterTraceListener" 
     initializeData="c:\SomePath\System.Net.trace.log"     
/> 

यदि आवश्यक हो, अपने अनुप्रयोग की पुष्टि एक परीक्षण पृष्ठ है कि एक ही में एक फ़ाइल बनाता है जोड़कर उस पथ लिखने की एक्सेस है निर्देशिका।

जब आप अपने वर्तमान कॉन्फ़िगरेशन के रूप में एक सापेक्ष पथ का उपयोग करते हैं, तो मेरा मानना ​​है कि यह आईआईएस के तहत चलते समय एप्लिकेशन की मूल निर्देशिका से संबंधित होगा। लेकिन जब विकास मशीन पर कैसिनी के तहत दौड़ते हैं, तो यह मामला नहीं होगा - आईआईआरसी यह% WINDIR% \ System32 के सापेक्ष होगा, लेकिन मैं इस पर भरोसा नहीं करता।

+0

बस रिकॉर्ड्स के लिए, ऐसा लगता है कि आप गलत हैं और माइक्रोसॉफ्ट कार्यान्वयन जांच करेगा कि प्रारंभिक डेटा में प्रदान किया गया पथ सापेक्ष है या नहीं। http://nicholas.piasecki.name/blog/2009/03/on-textwritertracelistener-inheritance-initializedata-aspnet-and-paths/ – Oscar

+0

@ ऑस्कर - दिलचस्प ब्लॉग यह इंगित करता है कि कुछ माइक्रोसॉफ्ट इंजीनियर को बुरा दिन था। लेकिन प्रस्तावित "MungeFileName" समाधान को सरल "पथ। कॉम्बाइन (AppDomain.CurrentDomain.BaseDirectory, fileName) द्वारा प्रतिस्थापित किया जा सकता है"। पथ। कॉम्बाइन विधि उस मामले को संभालने के लिए पर्याप्त स्मार्ट है जहां इसका दूसरा तर्क स्वयं पर एक पूर्ण पथ है। – Joe

1

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

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