以下為小白個人使用的 ErrorLogUnit

 

附註說明 必須引用 Delphi XBINIUnit_FMX

詳見 http://kamilia1470.pixnet.net/blog/post/209011162-Delphi%20XBINIUnit_FMX

 

(* ---------------------------------------------------------------------------------------------- *)
// XBErrorLogUnit_FMX
// Author: Kamilia

// 用途:紀錄ErrorLog

// 初版: 2016/09/24
// 必須引用 XBINIUnit_FMX
(* ---------------------------------------------------------------------------------------------- *)
unit XBErrorLogUnit_FMX;

interface

// 取得ErrorLog檔案路徑
function GetErrorLogPath: String;

(* ---------------------------------------------------------------------------------------------- *)
// ErrorEvent 發生錯誤紀錄
// CustomMsg 自訂訊息
// ErrorClassName except 錯誤類別
// ErrorMsg except 錯誤訊息
// IsShowMsg 是否顯示訊息給使用者
(* ---------------------------------------------------------------------------------------------- *)
procedure ErrorEvent(CustomMsg: String; ErrorClassName: String = '';
  ErrorMsg: String = ''; IsShowMsg: Boolean = True);

implementation

uses
  System.Classes, System.SysUtils, FMX.Dialogs,
{$IFDEF IOS}
  iOSapi.UIKit, iOSapi.Foundation, Macapi.Helpers,
{$ENDIF}
{$IFDEF ANDROID}
  androidapi.JNI.JavaTypes,
  androidapi.Helpers,
  androidapi.JNI.Os,
{$ENDIF}
  XBINIUnit_FMX; // 必須使用XBINIUnit_FMX 取得當前位置

(* ---------------------------------------------------------------------------------------------- *)
// 取得Error.log路徑
(* ---------------------------------------------------------------------------------------------- *)
function GetErrorLogPath: String;
begin
  result := GetNDir + 'Error.log';
end;

(* ---------------------------------------------------------------------------------------------- *)
// ErrorEvent 發生錯誤紀錄
// CustomMsg 自訂訊息
// ErrorClassName except 錯誤類別
// ErrorMsg except 錯誤訊息
// IsShowMsg 是否顯示訊息給使用者
(* ---------------------------------------------------------------------------------------------- *)
procedure ErrorEvent(CustomMsg: String; ErrorClassName: String = '';
  ErrorMsg: String = ''; IsShowMsg: Boolean = True);
//以下代碼 來自XE10 DeviceInfo Sample
//預設位置 C:\Users\Public\Documents\Embarcadero\Studio\17.0\Samples\Object Pascal\Mobile Snippets\DeviceInfo
{$IFDEF ANDROID}
  function GetCodename(VerString: string): string;
  begin
    if VerString = '1.0' then
      result := 'BASE'
    else if VerString = '1.1' then
      result := 'BASE_1_1'
    else if VerString = '1.5' then
      result := 'CUPCAKE'
    else if VerString = '1.6' then
      result := 'DONUT'
    else if VerString = '2.0' then
      result := 'ECLAIR'
    else if VerString = '2.0.1' then
      result := 'ECLAIR_0_1'
    else if VerString = '2.1' then
      result := 'ECLAIR_MR1'
    else if VerString = '2.2' then
      result := 'FROYO'
    else if VerString = '2.3' then
      result := 'GINGERBREAD'
    else if VerString = '2.3.3' then
      result := 'GINGERBREAD_MR1'
    else if VerString = '3.0' then
      result := 'HONEYCOMB'
    else if VerString = '3.1' then
      result := 'HONEYCOMB_MR1'
    else if VerString = '3.2' then
      result := 'HONEYCOMB_MR2'
    else if VerString = '4.0' then
      result := 'ICE_CREAM_SANDWICH'
    else if VerString = '4.0.3' then
      result := 'ICE_CREAM_SANDWICH_MR1'
    else if VerString = '4.1' then
      result := 'JELLY_BEAN'
    else if VerString = '4.2' then
      result := 'JELLY_BEAN_MR1'
    else if VerString = '4.3' then
      result := 'JELLY_BEAN_MR2'
    else if Pos('4.4', VerString) = 1 then
      result := 'KITKAT'
    else
      result := 'UNKNOWN';
  end;
{$ENDIF}

var
  ts: TStrings;
{$IFDEF IOS}
  Device: UIDevice;
{$ENDIF}
begin
  ts := TStringList.Create;
  if not FileExists(GetErrorLogPath) then
  begin
    ts.Append('--------DeviceInfo--------');
{$IFDEF ANDROID}
    {
      lbDeviceType.Text := Format('Device Type: %s', [JStringToString(TJBuild.JavaClass.MODEL)]);
      lbOSName.Text := Format('OS Name: %s', [GetCodename(JStringToString(TJBuild_VERSION.JavaClass.RELEASE))]);
      lbOSVersion.Text := Format('OS Version: %s', [JStringToString(TJBuild_VERSION.JavaClass.RELEASE)]);
    }
    ts.Append(Format('Device Type: %s',
      [JStringToString(TJBuild.JavaClass.MODEL)]));
    // ts.Append(Format('OS Name: %s', [GetCodename(JStringToString(TJBuild_VERSION.JavaClass.RELEASE))]));
    // 上面這行似乎無用 只會顯示UNKNOW
    ts.Append(Format('OS Name: %s', ['ANDROID']));
    ts.Append(Format('OS Version: %s',
      [JStringToString(TJBuild_VERSION.JavaClass.RELEASE)]));
{$ENDIF}
{$IFDEF IOS}
    Device := TUIDevice.Wrap(TUIDevice.OCClass.currentDevice);
    {
      lbOSName.Text := Format('OS Name: %s', [NSStrToStr(Device.systemName)]);
      lbOSVersion.Text := Format('OS Version: %s', [NSStrToStr(Device.systemVersion)]);
      lbDeviceType.Text := Format('Device Type: %s', [NSStrToStr(Device.model)]);
    }
    ts.Append(Format('Device Type: %s', [NSStrToStr(Device.MODEL)]));
    ts.Append(Format('OS Name: %s', [NSStrToStr(Device.systemName)]));
    ts.Append(Format('OS Version: %s', [NSStrToStr(Device.systemVersion)]));
{$ENDIF}
{$IFDEF MSWINDOWS}
    ts.Append(Format('OS Name: %s', ['Windows']));
{$ENDIF MSWINDOWS}
    ts.Append('--------ErrorMsg--------');
    ts.SaveToFile(GetErrorLogPath);
  end;
  ts.LoadFromFile(GetErrorLogPath);
  ts.Append(FormatDateTime('YYYY/MM/DD HH:NN:SS:ZZZ', Now) + ' > ' +
    'Error ClassName = ' + ErrorClassName + ' ' + 'Error Message = ' + ErrorMsg
    + ' ' + #13 + CustomMsg);
  ts.SaveToFile(GetErrorLogPath);
  ts.Free;
  if IsShowMsg then
    ShowMessage(CustomMsg); // Show出給使用者看
end;

end.

 

 

附上檔案

https://drive.google.com/open?id=0B_Boa0V6iHIuNDhPNlIxSEtkUU0

歡迎引用,但請勿修改,並保留出處

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 抓狂小白 的頭像
    抓狂小白

    抓狂小白的程式筆記

    抓狂小白 發表在 痞客邦 留言(0) 人氣()