2008-11-12 5 views
7

में एक लॉग फ़ाइल में लिखें मैं फ़ाइल.एपेंडएल्टेक्स्ट विधि का उपयोग कर एएसपीनेट प्रेज़ेंटफैंडर में एक लॉग फ़ाइल में इवेंट डेटा लिख ​​रहा हूं। मैं चिंतित हूं कि क्या होगा जब एकाधिक अनुरोध एक साथ प्राप्त किए जाते हैं। क्या AppendAllText उस फ़ाइल को लॉक करता है जिसे वह लिख रहा है?एएसपी.नेट

उत्तर

6

नहीं, आपके पास लॉग-फ़ाइल लिखने की रक्षा करने वाला स्थिर लॉक ऑब्जेक्ट होना चाहिए, उदा।

public static object LockingTarget = new object(); 

public void LogToFile(string msg) 
{ 
    lock(LockingTarget) 
    { 
     //append to file here as fast as possible 
    } 
} 
+1

आईआईएस वेबगार्डन पर ध्यान दें। AFAIK आपके पास अलग प्रक्रिया है -> अलग स्थिर वस्तु। तो योन एक समवर्ती संघर्ष मिल सकता है। –

+0

फैब्रिजियो सही है, यदि आप वेब फार्म का उपयोग कर रहे हैं तो सभी दांव बंद हैं; मैं उस मामले में डेटाबेस में लॉगिंग करने का सुझाव देता हूं। आप शायद 50 सर्वर एक ही पाठ फ़ाइल में लिखने की कोशिश नहीं करना चाहते हैं! –

1

आप लॉग फ़ाइलों को लिखने के लिए My.Log का उपयोग कर सकते हैं।

संपादित करें: यदि आप FileLogTraceListener का उपयोग करते हैं, तो श्रोता थ्रेड-सुरक्षित है।

ऐसा करने से आप web.config फ़ाइल के माध्यम से लॉगिंग को नियंत्रित और कॉन्फ़िगर करने की अनुमति भी देते हैं।

8

मैं इस स्वयं को प्रबंधित करने की कोशिश करने के बजाय TextWriterTraceListener का उपयोग करने की सलाह देता हूं।

यह सेटअप और उपयोग करने के लिए बहुत सरल है:

TextWriterTraceListener logListener = new TextWriterTraceListener("C:\log.txt", "My Log Name"); 
Trace.Listeners.Add(logListener); 

और फिर लॉग इन करने के कुछ:

Trace.WriteLine("Log this text"); 

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