delphi 简单的Bug报告类

unit uBugReport;

interface

uses
  Windows, SysUtils, SyncObjs;

  procedure ReportBug(pszBugStr: PChar); stdcall;

implementation

var
  LogFileLock: TCriticalSection;

function GetAppRoot: string;
var
  path: string;
begin
  SetLength(path, MAX_PATH);
  SetLength(path, GetModuleFileName(HInstance, PChar(path), MAX_PATH));
  path := ExtractFilePath(path);
  Result := StringReplace(path, 'bin\', '', [rfIgnoreCase]);
end;

procedure ReportBug(pszBugStr: PChar);
var
  strPath: string;
  strFileName: string;
  F: Text;
  S: string;
  dtNow: TDateTime;
begin
  try
    OutputDebugString(pszBugStr);

    LogFileLock.Enter();
    try
      dtNow := Now();

      strPath := GetAppRoot() + 'Logs\';
      strFileName := strPath + FormatDateTime('YYYY-MM-DD', dtNow) + '.log';
      if not DirectoryExists(strPath) then ForceDirectories(strPath);

      AssignFile(F, strFileName);
      try
        if FileExists(strFileName) then
          Append(F)
        else
          Rewrite(F);

        S := FormatDateTime('YYYY-MM-DD HH:MM:SS', dtNow) + ' ' + StrPas(pszBugStr);
        Writeln(F, S);
      finally
        CloseFile(F);
      end;
    finally
      LogFileLock.Leave();
    end;
  except
  end;
end;

initialization
  IsMultiThread := True;
  LogFileLock := TCriticalSection.Create();

finalization
  FreeAndNil(LogFileLock);

end.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值