www.pudn.com > indyprelim.zip > IdLogFile.pas


{ 
  $Project$ 
  $Workfile$ 
  $Revision$ 
  $DateUTC$ 
  $Id$ 
 
  This file is part of the Indy (Internet Direct) project, and is offered 
  under the dual-licensing agreement described on the Indy website. 
  (http://www.indyproject.org/) 
 
  Copyright: 
   (c) 1993-2005, Chad Z. Hower and the Indy Pit Crew. All rights reserved. 
} 
{ 
  $Log$ 
} 
{ 
  Rev 1.8    7/23/04 6:36:54 PM  RLebeau 
  Added extra exception handling to Open() 
 
  Rev 1.7    2004.05.20 12:34:30 PM  czhower 
  Removed more non .NET compatible stream read and writes 
 
  Rev 1.6    2004.02.03 4:17:16 PM  czhower 
  For unit name changes. 
 
  Rev 1.5    2003.10.17 6:15:54 PM  czhower 
  Upgrades 
 
  Rev 1.4    2003.10.16 11:24:36 AM  czhower 
  Bug fix 
 
  Rev 1.3    10/15/2003 8:00:10 PM  DSiders 
  Added resource string for exception raised in TIdLogFile.SetFilename. 
 
  Rev 1.2    2003.10.14 1:27:10 PM  czhower 
  Uupdates + Intercept support 
 
  Rev 1.1    6/16/2003 11:01:06 AM  EHill 
  Throw exception if the filename is set while the log is open. 
  Expose Open and Close as public instead of protected. 
 
  Rev 1.0    11/13/2002 07:56:12 AM  JPMugaas 
 
  19-Aug-2001 DSiders 
  Fixed bug in Open.  Use file mode fmCreate when Filename does *not* exist. 
 
  19-Aug-2001 DSiders 
  Added protected method TIdLogFile.LogWriteString. 
 
  19-Aug-2001 DSiders 
  Changed implementation of TIdLogFile methods LogStatus, LogReceivedData, and 
  LogSentData to use LogWriteString. 
 
  19-Aug-2001 DSiders 
  Added class TIdLogFileEx with the LogFormat method. 
} 
 
unit IdLogFile; 
 
interface 
{$I IdCompilerDefines.inc} 
//Put FPC into Delphi mode 
uses 
  IdLogBase, IdObjs; 
 
type 
  TIdLogFile = class(TIdLogBase) 
  protected 
    FFilename: String; 
    FFileStream: TIdStream; 
    // 
    procedure LogFormat(AFormat: string; AArgs: array of const); virtual; 
    procedure LogReceivedData(AText: string; AData: string); override; 
    procedure LogSentData(AText: string; AData: string); override; 
    procedure LogStatus(AText: string); override; 
    procedure LogWriteString(AText: string); virtual; 
    // 
    procedure SetFilename(AFilename: String); 
  public 
    procedure Open; override; 
    procedure Close; override; 
  published 
    property Filename: String read FFilename write SetFilename; 
  end; 
 
implementation 
 
uses 
  IdGlobal, IdException, IdResourceStringsCore, IdSys, IdBaseComponent; 
 
{ TIdLogFile } 
 
procedure TIdLogFile.Close; 
begin 
  Sys.FreeAndNil(FFileStream); 
end; 
 
procedure TIdLogFile.LogReceivedData(AText, AData: string); 
begin 
  LogWriteString(RSLogRecv + AText + ': ' + AData + EOL);  {Do not translate} 
end; 
 
procedure TIdLogFile.LogSentData(AText, AData: string); 
begin 
  LogWriteString(RSLogSent + AText + ': ' + AData + EOL);  {Do not translate} 
end; 
 
procedure TIdLogFile.LogStatus(AText: string); 
begin 
  LogWriteString(RSLogStat + AText + EOL); 
end; 
 
procedure TIdLogFile.Open; 
begin 
  if not IsDesignTime then 
  begin 
    FFileStream := TAppendFileStream.Create(Filename); 
  end; 
end; 
 
procedure TIdLogFile.LogWriteString(AText: string); 
begin 
  WriteStringToStream(FFileStream, AText); 
end; 
 
procedure TIdLogFile.LogFormat(AFormat: string; AArgs: array of const); 
var 
  sPre: string; 
  sMsg: string; 
  sData: string; 
begin 
  // forces Open to be called prior to Connect 
  if not Active then 
  begin 
    Active := True; 
  end; 
 
  sPre := '';   {Do not translate} 
  sMsg := '';   {Do not translate} 
 
  if LogTime then 
  begin 
    sPre := Sys.DateTimeToStr(Sys.Now) + ' ' ;      {Do not translate} 
  end; 
 
  sData := Sys.Format(AFormat, AArgs); 
  if FReplaceCRLF then begin 
    sData :=  ReplaceCR(sData); 
  end; 
  sMsg := sPre + sData + EOL; 
 
  LogWriteString(sMsg); 
end; 
 
procedure TIdLogFile.SetFilename(AFilename: String); 
begin 
  EIdException.IfAssigned(FFileStream, RSLogFileAlreadyOpen); 
  FFilename := AFilename; 
end; 
 
end.