ulogwriters.pas
来自「FMA is a free1 powerful phone editing to」· PAS 代码 · 共 123 行
PAS
123 行
unit uLogWriters;
{
*******************************************************************************
* Descriptions: Log Writer Classes
* $Source: /cvsroot/fma/fma/uLogWriters.pas,v $
* $Locker: $
*
* Todo:
*
* Change Log:
* $Log: uLogWriters.pas,v $
*
}
interface
uses
uLogger, Classes;
type
ILogWriterEngine = interface
procedure WriteHeader(Stream: TStream);
procedure WriteItem(Stream: TStream; const Item: ILogItem);
procedure WriteStr(Stream: TStream; const Str: WideString);
procedure WriteFooter(Stream: TStream);
end;
TLogWriter = class
private
FLogEnumeration: ILogEnumeration;
FLogWriterEngine: ILogWriterEngine;
public
constructor Create(const ALogEnumeration: ILogEnumeration = nil);
procedure ToStream(Stream: TStream);
property LogEnumeration: ILogEnumeration read FLogEnumeration write FLogEnumeration;
property LogWriterEngine: ILogWriterEngine read FLogWriterEngine write FLogWriterEngine;
end;
TLogTextWriterEngine = class(TInterfacedObject, ILogWriterEngine)
public
procedure WriteHeader(Stream: TStream); virtual;
procedure WriteItem(Stream: TStream; const Item: ILogItem);
procedure WriteStr(Stream: TStream; const Str: WideString);
procedure WriteFooter(Stream: TStream); virtual;
end;
TLogTextWriterEngineWithBOM = class(TLogTextWriterEngine)
public
procedure WriteHeader(AStream: TStream); override;
end;
implementation
uses
SysUtils;
{ TLogWriter }
constructor TLogWriter.Create(const ALogEnumeration: ILogEnumeration);
begin
inherited Create;
FLogEnumeration := ALogEnumeration;
end;
procedure TLogWriter.ToStream(Stream: TStream);
var LogItem: ILogItem;
begin
if Assigned(FLogWriterEngine) then begin
FLogWriterEngine.WriteHeader(Stream);
LogItem := FLogEnumeration.First;
while Assigned(LogItem) do begin
FLogWriterEngine.WriteItem(Stream, LogItem);
LogItem := FLogEnumeration.Next(LogItem);
end;
FLogWriterEngine.WriteFooter(Stream);
end;
end;
{ TLogTextWriterEngine }
procedure TLogTextWriterEngine.WriteFooter(Stream: TStream);
begin
end;
procedure TLogTextWriterEngine.WriteHeader(Stream: TStream);
begin
end;
procedure TLogTextWriterEngine.WriteItem(Stream: TStream; const Item: ILogItem);
var
Msg: WideString;
begin
{ TODO : Write other fields to the file, like severity and category }
Msg := FormatDateTime('hh":"nn":"ss":"zzz', Item.DateTime);
Msg := Msg + ': ' + Item.Message;
WriteStr(Stream, Msg);
end;
procedure TLogTextWriterEngine.WriteStr(Stream: TStream; const Str: WideString);
var
Msg: WideString;
begin
Msg := Str + sLinebreak;
Stream.Write(Msg[1], Length(Msg) * 2);
end;
procedure TLogTextWriterEngineWithBOM.WriteHeader(AStream: TStream);
const BOM: Word = $FEFF;
begin
AStream.Write(BOM, SizeOf(Word));
end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?