2014-01-17 45 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;