在多个服务之间共享一个日志文件(每个服务有多个线程),如何?

avr*_*ron 9 delphi logging multithreading

我有一个问题,我需要为我的一个项目解决.我需要为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;
Run Code Online (Sandbox Code Playgroud)

有更好的想法吗?

编辑:我应该构建另一个服务,一个记录器服务,等待需要从其他服务记录的消息,然后只有一个服务必须处理日志文件?如果这是一个很好的解决方案,那么在服务之间进行通信的最佳方式是什么?我可以用Indy ......

Dav*_*nan 3

使用命名互斥体的解决方案将起作用,并且肯定是最简单的方法。