一个简单Tracer类,用来为应用写入跟踪

来源:计算机等级考试    发布时间:2012-08-28    计算机等级考试视频    评论

  ===================类的代码===============
  {*******************************************************}
  { }
  { CodeMachine }
  { }
  { 版权所有 (C) 2004 nil }
  { }
  { 2004-6-10 }
  { }
  {*******************************************************}
  {
  通常将TTracer的实例存放于application级的Session中,在使用时,
  创建一个ITraceInfo,调用TTracer.Write(ITraceInfo)即可,
  }
  unit com.sunset.app.tracer;
  interface
  uses StrUtils,classes,SysUtils;
  type
  //==============================================
  // 接口声明
  //==============================================
  //跟踪信息的接口
  ITraceInfo = interface
  function ToString: string;
  end;
  //输出目标的接口
  IOutput = interface
  procedure Write(const aInfo: ITraceInfo); //写入跟踪信息
  end;
  //============================================
  // 跟踪信息类 ,实现 ITraceInfo
  //============================================
  //string形式的跟踪记录
  TStringTI = class(TInterfacedObject, ITraceInfo)
  private
  FData: string;
  public
  constructor Create(data: string);
  function ToString: string;
  end;
  //============================================
  // 跟踪信息输出类,实现 IOutput
  //============================================
  TFileLog = class(TInterfacedObject, IOutput)
  private
  FLogFile: string;
  public
  constructor Create(const FileName: string);
  procedure Write(const aInfo: ITraceInfo); //写入跟踪信息
  end;
  TProcStr = procedure(const value:string) of Object;
  TDatabaseLog = class(TInterfacedObject, IOutput)
  private
  FWriteProc :TProcStr;
  public
  constructor Create(WriteProc: TProcStr);
  procedure Write(const aInfo: ITraceInfo); //写入跟踪信息
  end;
  //============================================
  // 跟踪工具
  //============================================
  { TTracer }
  //用来进行记录跟踪日志的类
  TTracer = class(TObject)
  private
  FOutput: IOutput; //输出目标
  procedure SetOutput(const Value: IOutput);
  public
  constructor Create; overload;
  constructor Create(aOutput: IOutput); overload;
  destructor Destroy; override;
  property Output: IOutput read FOutput write SetOutput;
  procedure Write(const aInfo: ITraceInfo); //写入跟踪信息
  end;
  implementation
  { TTracer }
  constructor TTracer.Create;
  begin
  end;
  constructor TTracer.Create(aOutput: IOutput);
  begin
  FOutput := aOutput;
  end;
  destructor TTracer.Destroy;
  begin
  if FOutput <> nil then FOutput := nil;
  inherited;
  end;
  procedure TTracer.SetOutput(const Value: IOutput);
  begin
  FOutput := Value;
  end;   procedure TTracer.Write(const aInfo: ITraceInfo);
  begin
  if FOutput = nil then raise Exception.CreateFmt('没有创建输出目标%s!!!', []);
  FOutput.Write(aInfo);
  end;
  { TStringTI }
  constructor TStringTI.Create(data: string);
  begin
  FData := Data;
  end;
  function TStringTI.ToString: string;
  begin
  Result := FData;
  end;
  { TStringLog }
  constructor TFileLog.Create(const FileName: string);
  begin
  FLogFile := FileName;
  end;
  procedure TFileLog.Write(const aInfo: ITraceInfo);
  begin
  if not FileExists(FLogFile) then FileClose(FileCreate(FLogFile));
  with TStringList.Create do
  begin
  try
  LoadFromFile(FLogFile);
  Add(aInfo.ToString);
  SaveToFile(FLogFile);
  finally
  Free;
  end;
  end;
  end;
  { TDatabaseLog }
  constructor TDatabaseLog.Create(WriteProc: TProcStr);
  begin
  FWriteProc := WriteProc;
  if not Assigned(FWriteProc) then raise Exception.CreateFmt('没有传入正确的写入跟踪方法%s!!!', []);
  end;
  procedure TDatabaseLog.Write(const aInfo: ITraceInfo);
  begin
  FWriteProc(aInfo.ToString);
  end;
  end.
  =============测试代码===================
  {***********************************}
  { }
  { 测试名称: }
  { 作 者: }
  { 版 本: }

上一页12下一页

视频学习

我考网版权与免责声明

① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;

② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。

最近更新

社区交流

考试问答