anchor.diff:    end;
   end;
   
  -{ TLoggerProFilteringFileAppender }
  -
  -constructor TLoggerProFilteringFileAppender.Create(
  -  aLogTags: array of string;
  -  const aFileNameTag: string;
  -  aMaxBackupFileCount, aMaxFileSizeInKiloByte: Integer; aLogsFolder: string;
  -  aFileAppenderOptions: TFileAppenderOptions;
  -  aLogFileNameFormat, aLogFormat: string;
  -  aEncoding: TEncoding);
  -var
  -  i : integer;
  -begin
  -  inherited Create(aMaxBackupFileCount, aMaxFileSizeInKiloByte, aLogsFolder, aFileAppenderOptions, aLogFileNameFormat, aLogFormat, aEncoding);
  -  SetLength(fLogTags, Length(aLogTags));
  -  for i := Low(aLogTags) to High(aLogTags) do
  -    fLogTags[i] := aLogTags[i];
  -  fFileNameTag := aFileNameTag;
  -end;
  -
  -procedure TLoggerProFilteringFileAppender.RotateLog;
  +{ TLoggerProSimpleFileAppender }
  +
  +procedure TLoggerProSimpleFileAppender.RotateLog;
   var
     lLogFileName: string;
   begin
  -  WriteToStream(fFilterWriter, '#[ROTATE LOG ' + datetimetostr(Now, FormatSettings) + ']');
  +  WriteToStream(fFileWriter, '#[ROTATE LOG ' + datetimetostr(Now, FormatSettings) + ']');
     // remove the writer during rename
  -  fFilterWriter.Free;
  +  fFileWriter.Free;
     RotateFile(cDefaultLogTag, lLogFileName);
     // re-create the writer
  -  fFilterWriter := CreateWriter(GetLogFileName(fFileNameTag, 0));
  -  WriteToStream(fFilterWriter, '#[START LOG ' + datetimetostr(Now, FormatSettings) + ']');
  -end;
  -
  -procedure TLoggerProFilteringFileAppender.Setup;
  -begin
  -  inherited;
  -  fFilterWriter := CreateWriter(GetLogFileName(fFileNameTag, 0));
  -end;
  -
  -procedure TLoggerProFilteringFileAppender.TearDown;
  -begin
  -  fFilterWriter.Free;
  -  inherited;
  -end;
  -
  -procedure TLoggerProFilteringFileAppender.WriteLog(const aLogItem: TLogItem);
  -begin
  -  if (Length(fLogTags) = 0) or MatchText(aLogItem.LogTag, fLogTags) then
  -    begin
  -      InternalWriteLog(fFilterWriter, aLogItem);
  -
  -      if fFilterWriter.BaseStream.Size > fMaxFileSizeInKiloByte * 1024 then
  -      begin
  -        RotateLog;
  -      end;
  -    end;
  +  fFileWriter := CreateWriter(GetLogFileName(cDefaultLogTag, 0));
  +  WriteToStream(fFileWriter, '#[START LOG ' + datetimetostr(Now, FormatSettings) + ']');
  +end;
  +
  +procedure TLoggerProSimpleFileAppender.Setup;
  +begin
  +  inherited;
  +  fFileWriter := CreateWriter(GetLogFileName(cDefaultLogTag, 0));
  +end;
  +
  +procedure TLoggerProSimpleFileAppender.TearDown;
  +begin
  +  fFileWriter.Free;
  +  inherited;
  +end;
  +
  +procedure TLoggerProSimpleFileAppender.WriteLog(const aLogItem: TLogItem);
  +begin
  +  InternalWriteLog(fFileWriter, aLogItem);
  +
  +  if fFileWriter.BaseStream.Size > fMaxFileSizeInKiloByte * 1024 then
  +  begin
  +    RotateLog;
  +  end;
   end;
   
   end.
  
positive.code:   TFileAppenderOptions = set of TFileAppenderOption;
  
    { @abstract(The base class for different file appenders)
      Do not use this class directly, but one of TLoggerProFileAppender or TLoggerProFilteringFileAppender.
      Check the sample @code(file_appender.dproj)
    }
    TLoggerProFileAppenderBase = class(TLoggerProAppenderBase)
  
negative.code:   end;
  
    { @abstract(A filtering file appender)
      This file appender writes all TLogItems into a single log file.
      Combined with a @code(TLoggerProAppenderFilterImpl) you can filter out any log tags you like.
      If you want to run several TLoggerProSimpleFileAppender in parallel you have to provide a different
      LogFileFormat for each of them in the constructor in order to prevent name collisions.
      To learn how to use this appender, check the sample @code(file_appender.dproj)
    }
    TLoggerProSimpleFileAppender = class(TLoggerProFileAppenderBase)
    private const
      cDefaultLogTag = '---';
    private
      fFileWriter: TStreamWriter;
      procedure RotateLog;
    public
      procedure Setup; override;
      procedure TearDown; override;
      procedure WriteLog(const aLogItem: TLogItem); overload; override;
  