Is the logging mechanism from Spring4D thread safe? (Spring units. Approach. *, I suppose)

Is the logging mechanism from Spring4D thread safe? (Spring units. Input. *, I suppose)

For example, can multiple threads decide and use an implementation for ILoggerfrom the next container?

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;

Using release / 1.2 branch (currently 33e3232 ... ).

+4
source share
1 answer

TFileLogAppender , TStreamLogAppender, TCriticalSection DoSend, , .

TTextLogAppender TCriticalSection DoSend. , mutliple .

+3

Source: https://habr.com/ru/post/1666499/


All Articles