anchor.diff:        FLoggers : TLoggerList;
       strict protected
         procedure IterateLoggers(const Action : TProc<ILogger>);
  +      procedure UnsafeCopyOpenArray<T>(const Source : array of T; var Dest : TArray<T>);
   
         property Loggers : TLoggerList read FLoggers;
       public
  
positive.code:   IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
  procedure TMetaLogger.EnterSection(const Vals : array of const);
  begin
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
  procedure TMetaLogger.EnterSectionFmt(const Msg : String; const Args : array of const);
  begin
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
  procedure TMetaLogger.EnterSectionVal(const Vals : array of TValue);
  begin
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        //
      end
    );
  end;
  
negative.code:   IterateLoggers(
      procedure (Logger : ILogger)
      begin
        Logger.Debug(Msg);
      end
    );
  end;
  
  procedure TMetaLogger.DebugFmt(const Msg : String; const Args : array of const);
  var
    LArgs : TArray<TVarRec>;
  begin
    UnsafeCopyOpenArray<TVarRec>(Args, LArgs);
  
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        Logger.DebugFmt(Msg, LArgs);
      end
    );
  end;
  
  procedure TMetaLogger.DebugVal(const Vals : array of TValue);
  var
    LVals : TArray<TValue>;
  begin
    UnsafeCopyOpenArray<TValue>(Vals, LVals);
  
    IterateLoggers(
      procedure (Logger : ILogger)
      begin
        Logger.DebugVal(LVals);
      end
    );
  end;
  