मुझे यह समस्या है कि मुझे अपनी परियोजनाओं में से किसी एक के लिए हल करने की आवश्यकता है। मुझे 3 अलग-अलग सेवाओं के लिए एक लॉग फ़ाइल बनाने की आवश्यकता है (पूछें नहीं, क्यों मेरे मालिक ने इसे इस तरह से अनुरोध किया)। प्रत्येक सेवा में फ़ाइल में जानकारी लॉग करने का प्रयास करने वाले एकाधिक थ्रेड हो सकते हैं, इसलिए मेरा सवाल यह है कि ऐसा करने का सबसे अच्छा तरीका क्या है?एकाधिक सेवाओं (एकाधिक थ्रेड के साथ प्रत्येक सेवा) के बीच एक लॉगफाइल साझा करें, कैसे करें?
क्या मुझे वैश्विक म्यूटेक्स का उपयोग करना चाहिए? कुछ ऐसा:
procedure LogToFile(fn, str: string);
var
F: TextFile;
begin
logMutex.Acquire;
try
{$I+}
try
AssignFile(F, fn);
if FileExists(fn) then
Append(F)
else
Rewrite(F);
Writeln(F, DateTimeToStr(Now) + ': ' + str);
CloseFile(F);
except
end;
{$I-}
finally
logMutex.Release;
end;
end;
initialization
logMutex := SyncObjs.TMutex.Create(nil, False,'some_global_mutex');
finalization
logMutex.Free;
कोई बेहतर विचार?
संपादित करें: मैं एक सेवा, एक लकड़हारा सेवा, कि संदेशों की जरूरत है कि अन्य सेवाओं से लॉग इन करने की और उसके बाद केवल एक ही सेवा लॉग फ़ाइलों से निपटने के लिए है के लिए इंतजार कर रहा है का निर्माण करना चाहिए? यदि यह एक अच्छा समाधान है, तो सेवाओं के बीच संवाद करने का सबसे अच्छा तरीका क्या है? मैं इंडी का उपयोग कर सकता था ...
http://www.raize.com/DevTools/CodeSite/Default.asp –
से कोडसाइट का प्रयास करें मेरी कंपनी ने अपनी स्वयं की लॉगिंग सेवा लिखी है। हम एक फ्री-थ्रेडेड COM ऑब्जेक्ट का उपयोग करते हैं ताकि ऐप को सेवा में लॉग संदेशों को धक्का दे सके, फिर यह आवश्यकतानुसार लॉग फ़ाइल में संदेशों को कतार और फ़्लश करता है। आप एक सादा पाठ फ़ाइल के बजाय एक विंडोज सिस्टम इवेंट लॉग का उपयोग करने पर भी विचार कर सकते हैं। फिर आपके ऐप्स 'ReportEvent()' के माध्यम से उस लॉग पर संदेश भेज सकते हैं और ओएस को आपके लिए वास्तविक लॉग फ़ाइल को संभालने दें। –
मैं एक अलग लॉगर सेवा लिखूंगा, फिर अपनी तीन सेवाओं को संदेश भेजने के लिए विंडो WM_COPYDATA संदेश का उपयोग करें। विशेष रूप से जब से लॉग सेवा फ़ाइल को संलग्न करने के लिए खुली रख सकती है। फाइल को लगातार खोलना धीमा हो जाता है। क्षमा करें, मैं उस स्थान पर नहीं हूं जहां इस समय मेरे पास नमूना कोड तक पहुंच है। –