我正在通过Log类查看FMX内置的日志记录支持,该类使用IFMXLoggingService来编写事件。我在iOS和Android中找到了日志文件位置的信息,但无法在Windows(8.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.AddPlatformService和TPlatformServices.RemovePlatformService注册和取消注册平台服务。
例如,您可以取消注册其中一个内置平台服务,并将其替换为适合您需求的平台服务的新实现。