私のプロジェクトの1つで解決する必要があるこの問題があります。3つの異なるサービスに対して1つのログファイルを作成する必要があります(理由は聞かないでください。上司がこのように要求しました)。各サービスは、ファイルに情報をログインしようとする複数のスレッドを持つことができるので、私の質問は、これを行うための最良の方法は何ですか?
グローバルミューテックスを使用する必要がありますか?このようなもの:
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;
より良いアイデアはありますか?
編集:他のサービスからログに記録する必要があるメッセージを待機し、1つのサービスだけがログファイルを処理する必要がある別のサービス、ロガーサービスを構築する必要がありますか?これが優れたソリューションである場合、サービス間で通信するための最良の方法は何ですか?私はインディを使うことができました...