restemplate/indy/Core/IdLogFile.pas

172 lines
4.1 KiB
Plaintext

{
$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
Classes,
IdLogBase;
type
TIdLogFile = class(TIdLogBase)
protected
FFilename: String;
FFileStream: TStream;
//
procedure LogFormat(const AFormat: string; const AArgs: array of const); virtual;
procedure LogReceivedData(const AText, AData: string); override;
procedure LogSentData(const AText, AData: string); override;
procedure LogStatus(const AText: string); override;
procedure LogWriteString(const AText: string); virtual;
//
procedure SetFilename(const AFilename: String);
public
procedure Open; override;
procedure Close; override;
published
property Filename: String read FFilename write SetFilename;
end;
implementation
uses
IdGlobal, IdException, IdResourceStringsCore, IdBaseComponent, SysUtils;
{ TIdLogFile }
procedure TIdLogFile.Close;
begin
FreeAndNil(FFileStream);
end;
procedure TIdLogFile.LogReceivedData(const AText, AData: string);
begin
LogWriteString(RSLogRecv + AText + ': ' + AData + EOL); {Do not translate}
end;
procedure TIdLogFile.LogSentData(const AText, AData: string);
begin
LogWriteString(RSLogSent + AText + ': ' + AData + EOL); {Do not translate}
end;
procedure TIdLogFile.LogStatus(const AText: string);
begin
LogWriteString(RSLogStat + AText + EOL);
end;
procedure TIdLogFile.Open;
begin
if not IsDesignTime then begin
FFileStream := TIdAppendFileStream.Create(Filename);
end;
end;
procedure TIdLogFile.LogWriteString(const AText: string);
var
LEncoding: IIdTextEncoding;
begin
if Assigned(FFileStream) then begin
LEncoding := IndyTextEncoding_8Bit;
WriteStringToStream(FFileStream, AText, LEncoding{$IFDEF STRING_IS_ANSI}, LEncoding{$ENDIF});
end;
end;
procedure TIdLogFile.LogFormat(const AFormat: string; const 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 := DateTimeToStr(Now) + ' '; {Do not translate}
end;
sData := IndyFormat(AFormat, AArgs);
if FReplaceCRLF then begin
sData := ReplaceCR(sData);
end;
sMsg := sPre + sData + EOL;
LogWriteString(sMsg);
end;
procedure TIdLogFile.SetFilename(const AFilename: String);
begin
if Assigned(FFileStream) then begin
raise EIdException.Create(RSLogFileAlreadyOpen);
end;
FFilename := AFilename;
end;
end.