gpt4 book ai didi

multithreading - Spring4D 的日志记录机制是线程安全的吗? (单位 Spring.Logging.*,我想)

转载 作者:行者123 更新时间:2023-12-03 15:30:17 25 4
gpt4 key购买 nike

Spring4D 的日志机制是线程安全的吗? (单位 Spring.Logging.*,我想)

例如,多个线程可以解析并使用以下容器中的 ILogger 实现吗?

uses
System.SysUtils,
Spring.Container,
Spring.Logging,
Spring.Logging.Appenders,
Spring.Logging.Controller,
Spring.Logging.Loggers;

var
Container: TContainer;
TextLogAppender: TTextLogAppender;
FileLogAppender: TFileLogAppender;
LoggerController: TLoggerController;
LoggerInThread1: ILogger;
LoggerInThread2: ILogger;
begin
TextLogAppender := TTextLogAppender.Create;
FileLogAppender := TFileLogAppender.Create;
FileLogAppender.FileName := 'Log.txt';
LoggerController := TLoggerController.Create;
LoggerController.AddAppender(TextLogAppender as ILogAppender);
LoggerController.AddAppender(FileLogAppender as ILogAppender);

Container := TContainer.Create;
try
Container.RegisterInstance<ILoggerController>(LoggerController);
Container.RegisterType<ILogger, TLogger>;

Container.Build;

LoggerInThread1 := Container.Resolve<ILogger>;
LoggerInThread2 := Container.Resolve<ILogger>;

{$Region 'threaded code'}
LoggerInThread1.Info('Hello from Thread 1!');
LoggerInThread2.Info('Hello from Thread 2!');
{$EndRegion}
finally
Container.Free;
end;
end;

使用分支release/1.2 (当前33e3232...)。

最佳答案

TFileLogAppender 可以同时在多个线程中使用,因为它派生自 TStreamLogAppender,后者在其 DoSend 中使用 TCriticalSection 方法以避免与多线程相关的问题。

TTextLogAppender 在其 DoSend 实现中使用 TCriticalSection 实例。所以我认为它不应该同时在多个线程中工作。

关于multithreading - Spring4D 的日志记录机制是线程安全的吗? (单位 Spring.Logging.*,我想),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41591650/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com