亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? cllogger.pas

?? Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼 Clever_Internet_Suite_6.2的代碼
?? PAS
字號:
{
  Clever Internet Suite Version 6.2
  Copyright (C) 1999 - 2006 Clever Components
  www.CleverComponents.com
}

unit clLogger;

interface

uses
  Classes, Windows, SysUtils, SyncObjs;

type
  TclLogEntryDirection = (edEnter, edLeave, edInside);

  TclLogger = class
  private
    FAccessor: TCriticalSection;
    FLogFileName: string;
    constructor CreateInstance;
    class function AccessInstance(Request: Integer): TclLogger;
    procedure PutMessageToFile(const AFileName, AMessage: string);
    procedure PutDataToFile(const AFileName: string; AData: PChar; ADataSize: Integer);
  public
    constructor Create;
    destructor Destroy; override;
    class function Instance: TclLogger;
    class procedure ReleaseInstance;

    procedure SetLogMessageFile(const AFileName: string);
    procedure InitLogMessage(const AFileName: string);
    procedure PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
      const AMessage: string; E: Exception; const Args: array of const); overload;
    procedure PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
      const AMessage: string; E: Exception); overload;
    procedure PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
      const AMessage: string); overload;
    procedure PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
      const AMessage: string; E: Exception; IsDataConnection: Boolean); overload;
    procedure PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
      const AMessage: string; AData: PChar; ADataSize: Integer); overload;
    property LogFileName: string read FLogFileName;
  end;

//TEMPLATE
//  {IFDEF LOGGER}try clPutLogMessage(Self, edEnter, 'AssignError');{ENDIF}
//  {IFDEF LOGGER}clPutLogMessage(Self, edLeave, 'AssignError'); except on E: Exception do begin clPutLogMessage(Self, edLeave, 'AssignError', E); raise; end; end;{ENDIF}

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string); overload;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception); overload;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception; const Args: array of const); overload;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; AData: PChar; ADataSize: Integer); overload;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; AData: TStream; APosition: Integer); overload;

implementation

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string);
begin
  TclLogger.Instance().PutLogMessage(AInstance, ADirection, AMessage);
end;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception);
begin
  TclLogger.Instance().PutLogMessage(AInstance, ADirection, AMessage, E);
end;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception; const Args: array of const);
begin
  TclLogger.Instance().PutLogMessage(AInstance, ADirection, AMessage, E, Args);
end;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; AData: PChar; ADataSize: Integer);
begin
  TclLogger.Instance().PutLogMessage(AInstance, ADirection, AMessage, AData, ADataSize);
end;

procedure clPutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; AData: TStream; APosition: Integer); overload;
var
  oldPos, size: Integer;
  buf: PChar;
begin
  try
    oldPos := AData.Position;
    GetMem(buf, AData.Size);
    try
      AData.Position := APosition;
      size := AData.Read(buf^, AData.Size);
      clPutLogMessage(AInstance, ADirection, AMessage, buf, size);
    finally
      FreeMem(buf);
      AData.Position := oldPos;
    end;
  except
  end;
end;

{ TclLogger }

var
  FInstance: TclLogger = nil;

class function TclLogger.AccessInstance(Request: Integer): TclLogger;
begin
  case Request of
    0 : ;
    1 : if not Assigned(FInstance) then FInstance := CreateInstance();
    2 : FInstance := nil;
  else raise Exception.CreateFmt('Illegal request %d in AccessInstance', [Request]);
  end;
  Result := FInstance;
end;

constructor TclLogger.Create;
begin
  inherited Create();
  raise Exception.CreateFmt('Access class %s through Instance only', [ClassName]);
end;

constructor TclLogger.CreateInstance;
begin
  inherited Create();
  FAccessor := TCriticalSection.Create();
  FLogFileName := ExtractFilePath(ParamStr(0)) + '\clevercomponents.log';
  FLogFileName := StringReplace(FLogFileName, '\\', '\', [rfReplaceAll]);
end;

destructor TclLogger.Destroy;
begin
  if AccessInstance(0) = Self then AccessInstance(2);
  FAccessor.Free();
  inherited Destroy();
end;

procedure TclLogger.InitLogMessage(const AFileName: string);
var
  hFile: THANDLE;
  CreationTime, LastAccessTime, LastWriteTime: TFileTime;
  sysTime: TSystemTime;
  sysDate: TDateTime;
begin
  FAccessor.Enter();
  try
    hFile := CreateFile(PChar(AFileName), 0, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
    if (hFile <> INVALID_HANDLE_VALUE) then
    begin
      GetFileTime(hFile, @CreationTime, @LastAccessTime, @LastWriteTime);
      CloseHandle(hFile);
      FileTimeToLocalFileTime(LastWriteTime, LastWriteTime);
      FileTimeToSystemTime(LastWriteTime, sysTime);
      sysDate := SystemTimeToDateTime(sysTime);
      if (sysDate < Date()) then
      begin
        DeleteFile(AFileName);
      end;
    end;
  finally
    FAccessor.Leave();
  end;
  SetLogMessageFile(AFileName);
end;

class function TclLogger.Instance: TclLogger;
begin
  Result:=AccessInstance(1);
end;

procedure TclLogger.PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception);
const
  cDirection: array[TclLogEntryDirection] of string = ('>', '<', '=');
var
  prefix, postfix: string;
  code: DWORD;
begin
  code := GetLastError();
  try
    prefix := FormatDateTime('dd-mm-yyyy:hh-nn-ss-zzz', Now()) + ' ';
    if (AInstance = nil) then
    begin
      prefix := prefix + '0 ';
    end else
    begin
      prefix := prefix + AInstance.ClassName + ' ';
    end;

    prefix := prefix + IntToStr(GetCurrentThreadId()) + ':' + IntToStr(Integer(AInstance))
      + ' ' + cDirection[ADirection] + ' ';
    if (E <> nil) then
    begin
      postfix := ' ' + E.ClassName + ': ' + E.Message;
    end else
    begin
      postfix := ' ';
    end;

    PutMessageToFile(LogFileName, prefix + AMessage + postfix + #13#10);
  finally
    SetLastError(code);
  end;
end;

procedure TclLogger.PutDataToFile(const AFileName: string; AData: PChar; ADataSize: Integer);
var
  hFile: THandle; 
  cnt: Cardinal;
begin
  FAccessor.Enter();
  try
    hFile := CreateFile(PChar(AFileName), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFile = INVALID_HANDLE_VALUE) then
    begin
      hFile := CreateFile(PChar(AFileName), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
        CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
    end;
    if (hFile <> INVALID_HANDLE_VALUE) then
    begin
      SetFilePointer(hFile, 0, nil, FILE_END);
      WriteFile(hFile, AData^, ADataSize, cnt, nil);
      CloseHandle(hFile);
    end;
  finally
    FAccessor.Leave();
  end;
end;

procedure TclLogger.PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception; IsDataConnection: Boolean);
const
  data: array[Boolean] of string = ('', 'data: ');
var
  code: DWORD;
begin
  code := GetLastError();
  try
    PutLogMessage(AInstance, ADirection, data[IsDataConnection] + AMessage, E);
  finally
    SetLastError(code);
  end;
end;

procedure TclLogger.PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection;
  const AMessage: string; E: Exception; const Args: array of const);
var
  code: DWORD;
begin
  code := GetLastError();
  try
    PutLogMessage(AInstance, ADirection, Format(AMessage, Args), E);
  finally
    SetLastError(code);
  end;
end;

procedure TclLogger.PutLogMessage(AInstance: TObject; ADirection: TclLogEntryDirection; const AMessage: string);
var
  code: DWORD;
begin
  code := GetLastError();
  try
    PutLogMessage(AInstance, ADirection, AMessage, nil);
  finally
    SetLastError(code);
  end;
end;

procedure TclLogger.PutMessageToFile(const AFileName, AMessage: string);
var
  hFile: THandle; 
  len, cnt: Cardinal;
  buf: PChar;
begin
  FAccessor.Enter();
  try
    hFile := CreateFile(PChar(AFileName), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
      OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
    if (hFile = INVALID_HANDLE_VALUE) then
    begin
      hFile := CreateFile(PChar(AFileName), GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil,
        CREATE_NEW, FILE_ATTRIBUTE_NORMAL, 0);
    end;
    if (hFile <> INVALID_HANDLE_VALUE) then
    begin
      SetFilePointer(hFile, 0, nil, FILE_END);
      len := Length(AMessage) + 1;
      GetMem(buf, len);
      StrCopy(buf, PCHAR(AMessage));
      WriteFile(hFile, buf[0], len - 1, cnt, nil);
      FreeMem(buf);
      CloseHandle(hFile);
    end;
  finally
    FAccessor.Leave();
  end;
end;

class procedure TclLogger.ReleaseInstance;
begin
  AccessInstance(0).Free();
end;

procedure TclLogger.SetLogMessageFile(const AFileName: string);
begin
  FAccessor.Enter();
  try
    FLogFileName := AFileName;
  finally
    FAccessor.Leave();
  end;
end;

procedure TclLogger.PutLogMessage(AInstance: TObject;
  ADirection: TclLogEntryDirection; const AMessage: string; AData: PChar;
  ADataSize: Integer);
const
  eofData = #13#10#13#10;
var
  code: DWORD;
begin
  code := GetLastError();
  try
    if (AData <> nil) and (ADataSize > 0) then
    begin
      PutLogMessage(AInstance, ADirection, AMessage + ' (' + IntToStr(ADataSize) + '): '#13#10);
      PutDataToFile(LogFileName, AData, ADataSize);
      PutDataToFile(LogFileName, eofData, Length(eofData));
    end else
    begin
      PutLogMessage(AInstance, ADirection, AMessage + ' (no data)');
    end;
  finally
    SetLastError(code);
  end;
end;

initialization

finalization
  TclLogger.ReleaseInstance();
  
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产老肥熟一区二区三区| 亚洲第一成年网| 99久免费精品视频在线观看| 欧美激情一区二区三区四区| av亚洲精华国产精华精华| 亚洲欧洲日韩综合一区二区| 91网站在线播放| 性做久久久久久久久| 日韩欧美一级二级三级| 国产精品一区一区三区| 中文欧美字幕免费| 色94色欧美sute亚洲线路一ni| 亚洲主播在线观看| 精品久久久影院| 99久久婷婷国产综合精品| 亚洲成人资源网| 精品国产一二三区| 色婷婷一区二区三区四区| 免费成人在线播放| 国产呦精品一区二区三区网站| 久久一留热品黄| 91丨国产丨九色丨pron| 奇米色777欧美一区二区| 国产精品成人免费在线| 欧美久久久久免费| 成人免费视频视频在线观看免费 | 亚洲激情成人在线| 欧美一区二区在线播放| 成人激情校园春色| 日产欧产美韩系列久久99| 国产精品久久久久影院亚瑟 | 日本高清免费不卡视频| 精品一区二区三区在线播放| 亚洲色图在线播放| 精品国产免费人成在线观看| 一本久久a久久精品亚洲| 极品销魂美女一区二区三区| 亚洲精品久久久蜜桃| 欧美mv日韩mv亚洲| 91福利国产成人精品照片| 国产在线精品一区二区三区不卡| 一区二区三区小说| 国产欧美视频在线观看| 日韩视频在线一区二区| 欧美丝袜丝nylons| 99re66热这里只有精品3直播 | 久久久久久久久久久久久夜| 欧美日本高清视频在线观看| 99久久免费精品| 国产成人午夜电影网| 蜜臀a∨国产成人精品| 一区二区三区在线观看欧美| 中文字幕第一区| 久久久亚洲精品一区二区三区 | 欧美一级片免费看| 欧洲亚洲精品在线| av电影天堂一区二区在线| 激情久久久久久久久久久久久久久久| 午夜婷婷国产麻豆精品| 亚洲欧美激情小说另类| 国产精品国产三级国产aⅴ入口 | 亚洲人精品午夜| 国产精品不卡视频| 亚洲国产精华液网站w| 久久久噜噜噜久噜久久综合| 欧美tk—视频vk| 精品剧情在线观看| 精品美女在线播放| 日韩精品一区二区三区视频播放 | 国产日韩在线不卡| 久久久精品黄色| 国产欧美日韩在线| 久久精品一区二区三区不卡牛牛 | 久久久久久99精品| 久久婷婷国产综合精品青草| 精品国产免费人成电影在线观看四季 | 色婷婷精品久久二区二区蜜臀av | 99热在这里有精品免费| 高清久久久久久| 成人午夜激情影院| 成人小视频在线观看| www.欧美.com| 一本在线高清不卡dvd| 色88888久久久久久影院野外| 欧美酷刑日本凌虐凌虐| 久久综合色8888| 在线观看视频欧美| 欧美日韩国产区一| 性做久久久久久久久| 国产精品亚洲视频| 亚洲成人一区二区| 欧美一级片在线观看| 97se亚洲国产综合自在线观| 欧美视频在线观看一区二区| 国产日韩欧美亚洲| 免费看日韩a级影片| 成人免费看黄yyy456| 欧美日韩国产在线观看| 国产精品女主播av| 老司机免费视频一区二区三区| 99视频精品在线| 久久免费的精品国产v∧| 日日摸夜夜添夜夜添国产精品| eeuss鲁片一区二区三区| 亚洲精品一区二区三区四区高清| 亚洲一区二区三区不卡国产欧美| 国产传媒欧美日韩成人| 日韩一区二区精品葵司在线| 亚洲自拍欧美精品| 91网站最新网址| 欧美经典一区二区三区| 美女网站色91| 欧美人与性动xxxx| 亚洲综合视频在线| 99精品视频一区| 国产精品免费免费| 日韩精品电影在线| 欧美色图12p| 亚洲另类在线制服丝袜| 成人午夜短视频| 久久久久久久精| 韩国视频一区二区| 国产精品久久久久久久裸模| 美国欧美日韩国产在线播放| 欧美日韩成人综合天天影院| 亚洲午夜在线视频| 精品视频在线免费看| 一卡二卡欧美日韩| 91久久奴性调教| 亚洲男帅同性gay1069| 91免费版pro下载短视频| 国产精品国产自产拍高清av王其| 国产xxx精品视频大全| 久久久99精品久久| 国产成人精品影视| 国产精品久久久久影院亚瑟| 成人一区二区三区视频在线观看| 国产视频视频一区| 成人免费视频视频| 亚洲欧美激情一区二区| 欧美综合在线视频| 亚洲成在人线在线播放| 欧美日韩夫妻久久| 蜜臂av日日欢夜夜爽一区| 欧美一级专区免费大片| 精品无码三级在线观看视频| 久久久国产精品麻豆| 成人免费视频视频在线观看免费| 亚洲视频一区在线| 在线观看国产91| 日韩和欧美的一区| 精品成人佐山爱一区二区| 国产精品18久久久久久久网站| 国产日本欧美一区二区| 91在线视频免费观看| 亚洲午夜久久久久| 日韩欧美一区二区久久婷婷| 国产露脸91国语对白| 国产精品青草久久| 欧美日韩和欧美的一区二区| 日本不卡123| 日本一区二区成人在线| 91高清视频在线| 久久精品理论片| 国产精品久99| 欧美日韩国产欧美日美国产精品| 精品一区二区免费视频| 国产精品美女一区二区在线观看| 91麻豆123| 久久国产尿小便嘘嘘尿| 国产精品久久久久久久久久久免费看 | 久久亚洲捆绑美女| k8久久久一区二区三区| 丝袜美腿亚洲色图| 国产视频一区在线观看| 欧美综合在线视频| 国产乱一区二区| 亚洲国产欧美日韩另类综合 | 亚洲三级视频在线观看| 这里只有精品视频在线观看| 国产不卡视频在线观看| 亚洲电影中文字幕在线观看| 久久久亚洲精品石原莉奈| 欧美视频完全免费看| 激情伊人五月天久久综合| 亚洲精品乱码久久久久久| 欧美精品一区二区三区四区| 在线国产电影不卡| 高清日韩电视剧大全免费| 午夜激情一区二区三区| 久久久久99精品一区| 欧美日韩成人高清| k8久久久一区二区三区| 精品亚洲欧美一区| 亚欧色一区w666天堂| 亚洲男人天堂av网| 欧美国产精品一区二区三区| 欧美一区二区国产| 欧美日韩精品免费| a级高清视频欧美日韩|