Skip to content

added some code #6

Description

@rnervi

Added a callable function to create the logfile but preserve "old" log and remove all old logs older than n days. Call this when initiate th logger instead of the original function.

----------- code start
PROCEDURE TLogger.ClearAndStore(DaysToPreserve: integer);
// added by rnervi nov23
CONST
// cannot use : as is forbidden by OS !
FORMAT_DATETIME_DEFAULT = 'yyyy-mm-dd hh.nn.ss';
VAR
p, f: string;

PROCEDURE DeleteFilesOlderThanXDays(Path: string; DaysOld: integer = 0;
// 0 => Delete every file, ignoring the file age
FileMask: string = '.');
VAR
iFindResult: integer;
SearchRecord: tSearchRec;
iFilesDeleted: integer;
BEGIN
iFilesDeleted := 0;
// iFindResult := FindFirst(TPath.Combine(Path, FileMask), faAnyFile, SearchRecord);
iFindResult := FindFirst(Path + FileMask, faAnyFile, SearchRecord);
IF iFindResult = 0 THEN
BEGIN
WHILE iFindResult = 0 DO
BEGIN
IF ((SearchRecord.Attr and faDirectory) = 0) THEN
BEGIN
IF (FileDateToDateTime(SearchRecord.Time) < Now - DaysOld) or (DaysOld = 0) THEN
BEGIN
// DeleteFile(TPath.Combine(Path, SearchRecord.Name));
DeleteFile(pchar(Path+SearchRecord.Name));
iFilesDeleted := iFilesDeleted + 1;
END;
END;
iFindResult := FindNext(SearchRecord);
END;
// FindClose(SearchRecord);
END;
// Result := iFilesDeleted;
END;

BEGIN
p := extractfilepath(FFileName);

// want to delete n "old versions" to avoid waste of space
// DeleteFilesOlderThan(DaysToPreserve,p,'.old);
DeleteFilesOlderThanXDays(p, DaysToPreserve, '
.old');

IF FileExists(FFileName) THEN
BEGIN
// want to make an historic of log file. thus
// rename it with his datetime to preserve

f := FormatDateTime(FORMAT_DATETIME_DEFAULT, Now) + ' ' +
  ExtractFileName(FFileName);

// rename as .old makes cleanup procedure easy !
 f :=  ChangeFileExt(f, '.old');
renamefile(FFileName, p + f);
// copyfile(pchar(FFileName),pchar(f),false);

END;

IF not FileExists(FFileName) THEN
Exit;

IF FIsInit THEN
CloseFile(FOutFile);

SysUtils.DeleteFile(FFileName);

FIsInit := False;
END;

----------- code end

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions