Tuesday, January 02, 2007


LogFile

Permet generar traces amb informació durant l'execució d'un programa.

unit LogFile;

interface

uses Windows, Classes, SysUtils, DsgnIntf, ShellAPI, Forms;


type TLogFileEd = class(TDefaultEditor)
  procedure ExecuteVerb(Index: integer); override;
  function GetVerb(Index: integer): string; override;
  function GetVerbCount: integer; override;
  end;

type TLogFile = class(TComponent)
  private
    FFileName: string;
    FFileStream: TFileStream;
    FSaveDate: boolean;
    FSaveHour: boolean;
    FActive: boolean;
    FLineHeader: string;
    FDailyFileName: boolean; //adds yyyymmdd before filename
    FCurrentDay: string;
  public
    constructor Create(AOwner: TComponent); override;
    destructor Destroy; override;
    procedure SaveToFile(str: string);
    procedure Delete;
  published
    property Active: boolean read FActive write FActive;
    property FileName: string read FFileName write FFileName;
    property SaveDate: boolean read FSaveDate write FSaveDate;
    property SaveHour: boolean read FSaveHour write FSaveHour;
    property DailyFileName: boolean read FDailyFileName write FDailyFileName;
    property LineHeader: string read FLineHeader write FLineHeader;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Components Delphi', [TLogFile]);
end;

constructor TLogFile.Create(AOwner: TComponent);
begin
  FFileName := 'noname.log';
  FSaveHour := True;
  FSaveDate := True;
  FActive := True;
  inherited Create(AOwner);
end;

destructor TLogFile.Destroy;
begin
  inherited Destroy;
end;

procedure TLogFile.Delete;
begin
  DeleteFile(FFileName);
end;

procedure TLogFile.SaveToFile(str: string);
var
  aux: string;
  y,m,d: word;
  fl: string;
begin
  if FActive=False then
    Exit;
  if FDailyFileName then
  begin
    DecodeDate(Now,y,m,d);
    FCurrentDay := Format('%.04d%.02d%.02d',[y,m,d]);
  end
  else
  begin
    FCurrentDay := '';
  end;
  fl := ExtractFilePath(FFileName)+FCurrentDay+ExtractFileName(FFileName);
  try
    FFileStream := TFileStream.Create(fl,fmOpenWrite);
  except
    try
      FFileStream := TFileStream.Create(fl,fmCreate);
    except
    end
  end;
  if (FSaveDate) and (FSaveHour) then
    aux := '<'+DateToStr(Date)+','+TimeToStr(Time)+'>'
  else
  if FSaveDate then
    aux := '<'+DateToStr(Date)+'>'
  else
  if FSaveHour then
    aux := '<'+TimeToStr(Time)+'>';
  aux := aux + #32 + FLineHeader + str + #13#10;
  try
    FFileStream.Seek(FFileStream.Size,soFromBeginning);
    FFileStream.Write(Pointer(aux)^, Length(aux));
  except
  end;
  FFileStream.Free;
end;

end.


Amb la propietat Active activem i desactivem la generació de traces. Les propietats SaveDate i SaveHour fan que en cada traça es guardi la data i l'hora respectivament de generació. A LineHeader podem posar un text que es generi a cada línea. Si activem DailyFileName, al nom del fitxer, FileName, s'afegeix la data del dia. Així, cada dia tenim un nom de fitxer difere nt. Finalment, una vegada tenim assignats a les propietats els valor que ens interessen, amb el métode SaveToFile, amb un text com a paràmetre, generem el text que volem que es guardi.

Comments: Post a Comment



<< Home

This page is powered by Blogger. Isn't yours?