以下為小白個人使用的 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
歡迎引用,但請勿修改,並保留出處