anchor.diff:  
       property CurrentLevel : TmLogMessageLevel read FCurrentLevel write FCurrentLevel;
       property FileName : TFileName read FFileName write FFileName;
  -    property MaxFileSizeInMb : integer read FMaxFileSizeInMb write FMaxFileSizeInMb;
  +
  +    property FileFolder : TFileName read FFileFolder write FFileFolder;
  +    property FileNameTemplate : TFileName read FFileNameTemplate write FFileNameTemplate;
  +    property CycleEveryDay : boolean read FCycleEveryDay write FCycleEveryDay;
  +    property KeepDays : integer read FKeepDays write FKeepDays;
     end;
   
     { TmConsolePublisher }
  
positive.code:   Result := false;
  end;
  
  procedure TmFilePublisher.AfterCreate;
  begin
    FFileName := '';
    FFileStream := nil;
    FMaxFileSizeInMb:= 0;
  end;
  
  destructor TmFilePublisher.Destroy;
  
negative.code: procedure TmFilePublisher.Publish(aContext, aLevel, aMessage: string; aDate: TDateTime);
  var
    s: RawByteString;
    actualFileName : String;
  begin
    if FFileName = '' then
      FFileName:= IncludeTrailingPathDelimiter(FFileFolder) + FFileNameTemplate;
  
    if FFileName <> '' then
    begin
      if FCycleEveryDay and (FFileDay <> trunc(Date)) then
      begin
        if Assigned(FFileStream) then
        begin
          FFileStream.WriteByte(10);
          FreeAndNil(FFileStream);
        end;
        ClearOldLogFiles;
      end;
  
      if not Assigned(FFileStream) then
      begin
        if FCycleEveryDay then
        begin
          FFileDay:= trunc(Date);
          actualFileName:= EncodeFileName(FFileDay);
          ClearOldLogFiles;
        end
        else
          actualFileName:= FFileName;
  
        if FileExists(actualFileName) then
        begin
          FFileStream := TFileStream.Create(actualFileName, fmOpenWrite);
          FFileStream.Seek(0, soFromEnd);
        end
        else
        begin
          FFileStream := TFileStream.Create(actualFileName, fmCreate);
          AddUTF8BOMToStream(FFileStream);
        end;
      end;
  