172 lines
4.1 KiB
Plaintext
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.
|
||
|
|