2014-01-17 44 views
0

我有写入日志文件和拉链它的程序。我想设置它,以便将采取的日志文件,并在一个月后压缩它并清除该文件,并重新设置做一遍,如果再过一个月过去了德尔福检查日期,使备份文件计划

procedure SendToLog(Const MType : twcMTypes; Const callProgram, callPas, callProssecs, EMessage, zipName : String; AddlStr : String = ''); 
Const 
    MTValues = 'EDS'; 
var 
    LogFile  : TextFile; 
    LogName  : String; 
    EString  : String; 
begin 
    logName := WebLogPath;    // þ for delimeter 
    EString := MTValues[ Ord(MType)+1] + PC + FormatDateTime('mm/dd/yyyy hh:nn:ss.zzz', Now) 
    + PC + callProgram + PC + callpas + PC + callProssecs + PC + EMessage; 
    Assign(LogFile, LogName); 
    if FileExists(LogName) then 
    Append(LogFile) { Open to Append } 
    else 
    begin 
    Rewrite(LogFile); { Create file } 
    end; 
    Writeln(LogFile, EString); 
    Close(LogFile); 
    ArchiveFiles('C:', 'mytest.log', 'C:', zipName + '.zip', 'M'); 

我想知道我怎么做每一次这样的程序记录的东西它会检查一个月过去了那么它会压缩一切到一个新的文件,并重置日志。

+0

通过设置一个循环进程和一个小批处理/ shell脚本,在操作系统级别执行这个更好吗?这将是一个行压缩文件和一个更删除旧的日志文件 - 或者只是一个总的,如果你的压缩工具必须添加的文件移动到存档的选项。 – alcalde

回答

0

你将不得不要么:

  1. 最后写日期的跟踪某处,坚持跨应用程序重新启动。

  2. 使用Win32 API GetFileTime()函数查询日志文件本身的最后写入日期。

  3. 将当前日期放在您编写的每个日志条目上,然后您可以查找日志文件的结尾并从最后写入的日志条目中读取日期。

你想要写一个新的日志条目,比较针对当前日期的最后一个已知日期的月份+一年,然后邮政编码重置日志文件,如果当前日期是更高的每一次。

0

所以你刚才检查创建日期,然后你决定是否需要一个新的文件或没有。

procedure SendToLog(Const MType : twcMTypes; Const callProgram, callPas, callProssecs, EMessage, zipName : String; AddlStr : String = ''); 
Const 
    MTValues = 'EDS'; 
    MaxAgeBeforeNewLogFile = 30; // 30 days, in TDateTime type convention 
var 
    LogFile  : TextFile; 
    LogName  : String; 
    EString  : String; 
    NeedZipLogFile : Boolean; ZipName: String; 
begin 
    logName := WebLogPath;    // þ for delimeter 
    EString := MTValues[ Ord(MType)+1] + PC + FormatDateTime('mm/dd/yyyy hh:nn:ss.zzz', Now) 
    + PC + callProgram + PC + callpas + PC + callProssecs + PC + EMessage; 

    NeedZipLogFile := False; 
    if System.IOUtils.TFile.Exists(LogName) then 
    NeedZipLogFile := Now() - System.IOUtils.TFile.GetCreationTime(LogName) 
         > MaxAgeBeforeNewLogFile; 


    if NeedZipLogFile then begin 
    ZipName := _Generate_New_Non_Used_And_Proper_Name_For_Archive(); 
    _Save_Log_Into_Zip(LogName); 

    If _Secure_Keeping_Of_Logs_Is_Very_Very_Important then begin 
     _Flush_Windows_File_Cache_To_Disk(ZipName); 
     _Read_Zipped_Log_Into_Memory(ZipName, ExtractFileName(LogName), _Temp_Memory_Buffer); 
     _Compare_With_Old_Log_File_And_Ensure_Nothing_Was_Lost(LogName, _Temp_Memory_Buffer); 
    end; 

    DeleteFile(LogFile); 
    end; 

    System.IOUtils.TFile.AppendAllText(LogFile, EString); 
end;