Meilleure gestion de logs sur Android

Mise en situation

Android dispose d’une gestion de logs assez intéressante. On y retrouve la notion de niveau de logs, et la possibilité de poser un tag sur chaque ligne. Pour les visualiser, on passe par le plugin ADT et sa vue LogCat.

Tout cela c’est bien beau… Mais ce système impose d’avoir accès au smartphone (ou à la tablette) pour consulter les logs. Or, dans ma mission actuelle, le projet est envoyé en pilote à différents endroits en France. Il n’est donc pas pensable de se déplacer pour consulter ces informations, et le personnel présent a autre chose à faire que de taper des lignes de commandes ou de lancer Eclipse. :)

Alors quoi ? Comment konfai ?

J’ai donc cherché des solutions de logs en me basant sur ce qui existe déjà pour Java/JEE. Et il y a des projets portant les principaux frameworks de logs sur ces terminaux. Parfait !

Parmis d’autre, on retrouve donc les librairies suivantes :

Après quelques tests, je me suis rapidement orienté vers Logback-Android pour plusieurs raisons :

  • je l’utilise déjà au quotidien ;
  • il intègre une large panoplie d’appender (dont  FileRollingAppender, DBAppender, SocketAppender) ;
  • il est configurable de plusieurs façons (AndroidManifest, logback.xml, programmatiquement) ;
  • et surtout, Logback, c’est la vie.

Ci-dessous mon fichier logback.xml pour l’exemple. On y retrouve bien la syntaxe usuelle :)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/sdcard/logs/epod.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- daily rollover -->
<fileNamePattern>/sdcard/logs/epod.%d{yyyy-MM-dd}.log</fileNamePattern>
<!-- keep 30 days' worth of history -->
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36}:%line - %msg%n</pattern>
</encoder>
</appender>

<root level="DEBUG">
<appender-ref ref="FILE" />
</root>
</configuration>

Et les logs on les récupère comment ?

La solution la plus simple serait de configurer un SocketAppender et d’envoyer le tout sur un serveur dédié à cette tâche. Mais cela nécessite que le terminal soit toujours relié au réseau, ce qui est loin d’être évident avec des appareils mobiles.

Pour mon projet, les appareils en question sont des tablettes qui sont toujours reliées à un réseau interne. Elles communiquent avec le SI grâce à Soja. Pour simplifier les choses, on a donc opté pour une solution nous permettant de récupérer les logs sur la tablette, uniquement lorsque l’on en a besoin.

  1. La tablette souscrit à deux topics fixés : /logs/list et /logs/download ;
  2. on envoie un message sur le topic /logs/list contenant le nom d’un autre topic sur lequel envoyer la réponse ;
  3. la tablette renvoie la liste des fichiers de logs disponibles ;
  4. on envoie un second message sur le topic /logs/download contenant le nom d’un topic de réponse et le fichier à envoyer.
Communication STOMP pour récupérer les logs

Communication STOMP pour récupérer les logs

Conclusion

Il existe donc des librairies de logs intéressantes pour Android. Pour les puristes, on peut très bien intégrer une de ces solutions avec un appender qui renvoie le tout sur LogCat et ainsi ne pas changer leurs habitudes :)

VN:R_U [1.9.22_1171]
Rating: 0 (from 0 votes)
Share
Ce contenu a été publié dans Android, Java, Non classé, avec comme mot(s)-clef(s) , , , , , , , . Vous pouvez le mettre en favoris avec ce permalien.

3 réponses à Meilleure gestion de logs sur Android

  1. Joan Zapata dit :

    Nice ! Il faut énormément de logs pour affecter les perfs d’une app avec le Logcat (source). Je sais pas à quel point le Logcat est optimisé, je sais juste qu’il se base sur des fonctions natives, mais est-ce qu’on ne constate pas plus rapidement des problèmes de perfs avec logback-android ? (IO synchrones ?)
    Note que je ne pose la question que par curiosité, en l’occurence je pense que ce n’est pas l’outil mais le développeur qu’il faut remettre en question si il y a des problèmes de perfs en prod causés par des logs trop nombreux. :)

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)
    • Damien V. dit :

      Actuellement le projet est en phase de pilote, donc on veut qu’il soit assez bavard sur les logs.
      Par contre, le point intéressant c’est qu’on aura juste à modifier le niveau de logs avant de lancer le projet en prod. Du coup niveau perfs, ça devrait aller je pense :)

      VN:R_U [1.9.22_1171]
      Rating: 0 (from 0 votes)
  2. Ping : Revue de l’actu Android pro du 16 septembre 2012 | Paris Android User Group

Laisser un commentaire