Nov
21
|
Ce matin, lors du second épisode du Dév du Jeudi, un participant a demandé comment générer des logs depuis son application…
J’ai profité de la pause-déjeuner pour faire un petit test…
Pour avoir des logs dynamiques, j’ai utilisé :
- adb shell
- BusyBox
- WiFi ADB
- Delphi
- Un téléphone rooté
Mon téléphone qui est rooté, m’a permis d’installer BusyBox qui est un shell avec plus de commandes, dont tail.
Il me permet également d’accéder à des répertoires qui ne sont pas visible si l’on n’est pas root.
J’ai commencé par écrire une petite application qui génère un fichier de log.
Voici son code source :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 | unit uMain; interface uses System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants, FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls, FMX.Edit, System.IOUtils; type TfrmApp = class(TForm) edtTextToLog: TEdit; btnAddLogs: TButton; btnClearLogs: TButton; btnPaths: TButton; procedure btnAddLogsClick(Sender: TObject); procedure btnClearLogsClick(Sender: TObject); procedure btnPathsClick(Sender: TObject); procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end; var slLogs: TStringList; frmApp: TfrmApp; implementation {$R *.fmx} procedure Log(msg: string); begin if not Assigned(slLogs) then begin slLogs := TStringList.Create; end; slLogs.Add(DateTimeToStr(Now) + ' : ' + msg); slLogs.SaveToFile(TPath.GetHomePath + PathDelim + 'mylogs'); end; procedure LogClear; begin if not Assigned(slLogs) then begin slLogs := TStringList.Create; end else begin slLogs.Clear; end; slLogs.SaveToFile(TPath.GetHomePath + PathDelim + 'mylogs'); end; procedure TfrmApp.btnAddLogsClick(Sender: TObject); begin Log(edtTextToLog.Text); end; procedure TfrmApp.btnClearLogsClick(Sender: TObject); begin LogClear; end; procedure TfrmApp.btnPathsClick(Sender: TObject); begin Log('GetHomePath: ' + TPath.GetHomePath); Log('GetDocumentsPath: ' + TPath.GetDocumentsPath); end; procedure TfrmApp.FormCreate(Sender: TObject); begin Log('FormCreate'); end; end. |
Le FMX de l’interface :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | object frmApp: TfrmApp Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 567 ClientWidth = 384 FormFactor.Width = 320 FormFactor.Height = 480 FormFactor.Devices = [dkDesktop] OnCreate = FormCreate DesignerMobile = True DesignerWidth = 384 DesignerHeight = 592 DesignerDeviceName = 'Google Nexus 4' DesignerOrientation = 0 DesignerOSVersion = '' object edtTextToLog: TEdit Touch.InteractiveGestures = [igLongTap, igDoubleTap] Anchors = [akLeft, akTop, akRight] TabOrder = 0 Text = 'Hello Word!' Position.X = 16.000000000000000000 Position.Y = 16.000000000000000000 Width = 353.000000000000000000 Height = 32.000000000000000000 KillFocusByReturn = False end object btnAddLogs: TButton Anchors = [akLeft, akTop, akRight] Height = 44.000000000000000000 Position.X = 16.000000000000000000 Position.Y = 64.000000000000000000 TabOrder = 1 Text = 'Add' Trimming = ttCharacter Width = 353.000000000000000000 OnClick = btnAddLogsClick end object btnClearLogs: TButton Anchors = [akLeft, akTop, akRight] Height = 44.000000000000000000 Position.X = 16.000000000000000000 Position.Y = 112.000000000000000000 TabOrder = 2 Text = 'Clear' Trimming = ttCharacter Width = 353.000000000000000000 OnClick = btnClearLogsClick end object btnPaths: TButton Anchors = [akLeft, akTop, akRight] Height = 44.000000000000000000 Position.X = 16.000000000000000000 Position.Y = 192.000000000000000000 TabOrder = 3 Text = 'Paths' Trimming = ttCharacter Width = 353.000000000000000000 OnClick = btnPathsClick end end |
Les différents boutons permettent d’ajouter des logs, de les purger ou de mettre dans les logs des chemins systèmes.
Sur la page suivante, comment j’affiche ensuite dynamiquement le contenu du fichier de log…
Pages : 1 2
Il me semble plus judicieux d’utiliser les fonctions de l’unité Androidapi.Log et « adb logcat » ou son intégration sous Eclipse.
@ Paul TOTH : J’suis d’accord… ce serait bien plus propre/standard…
Cette méthode peut être plus intéressante pour vérifier le contenu de ses propres fichiers plutot que pour générer des logs…
Bonjour,
Perso, je préfère cette solution qui a l’avantage d’être multiplateforme
@ Dergen : Bonjour,
Merci pour votre commentaire qui donne un autre point de vue
Pings: Liens de l’épisode 2 de la saison 3 | Le Dev du Jeudi
modifié/traduit par Whiler
Politique de confidentialité