Firemonkey IFMXLoggingService Windows事件日志位置

时间:2015-09-17 13:03:08

标签: delphi firemonkey

我正在通过Log类查看FMX内置的日志记录支持,该类使用IFMXLoggingService来编写事件。我在iOS和Android中找到了日志文件位置的信息,但无法在Windows(8.1)上找到任何内容。

有谁知道此服务写入哪个特定日志文件?这是否可以通过代码或其他方式进行更改?

由于

1 个答案:

答案 0 :(得分:3)

如果查看来源,您会在FMX.Platform.Win.TPlatformWin.Log找到实施:

procedure TPlatformWin.Log(const Fmt: string; const Params: array of const);
begin
  OutputDebugString(PChar(Format(Fmt, Params)));
end;

OutputDebugString()根本不会向任何日志文件发送消息。当应用程序在调试器内运行时,它会记录到调试器的内置事件日志。当应用程序在调试程序之外运行时,SysInternal DebugView等第三方工具可以捕获这些消息。

如果要使用自定义记录器,请编写一个实现IFMXLoggingService接口的类,并在运行时将其注册到FMX:

type
  TMyLoggingService = class(TInterfacedObject, IFMXLoggingService)
  public
    procedure Log(const Format: string; const Params: array of const);
  end;

procedure TMyLoggingService.Log(const Format: string; const Params: array of const);
begin
  // do whatever you want...
end;

var
  MyLoggingService : IFMXLoggingService;
begin
  MyLoggingService := TMyLoggingService.Create;

  // if a service is already registered, remove it first
  if TPlatformServices.Current.SupportsPlatformService( IFMXLoggingService ) then
    TPlatformServices.Current.RemovePlatformService( IFMXLoggingService );

  // now register my service
  TPlatformServices.Current.AddPlatformService( IFMXLoggingService, MyLoggingService );
end;

Embarcadero's documentation中提到了这一点:

  

您可以分别使用TPlatformServices.AddPlatformServiceTPlatformServices.RemovePlatformService注册和取消注册平台服务。

     

例如,您可以取消注册其中一个内置平台服务,并将其替换为适合您需求的平台服务的新实现。