web-dev-qa-db-fra.com

Quel cadre de journalisation Android Android à utiliser?

Ma question semble être facile à répondre, mais il existe plusieurs bonnes solutions. J'aime choisir le "meilleur".

Cadres disponibles (n'hésitez pas à en suggérer plus):

Avantages/inconvénients:

Androlog:

  • Pro: similaire à Android framework de journalisation, donc il n'y a que de petites modifications dans le code existant; Capable d'envoyer des rapports d'erreur avec plus de détails dans le rapport d'erreur (les journaux autour de l'exception); Beaux journaux
  • Con: Pas de standard Java Approche "getLogger"; Configuration de production réalisable en téléchargeant le fichier de propriétés sur sdcard; J'ai besoin d'appeler manuellement la journalisation init; Besoin de créer LOG_TAG comme des constantes, ou de le pirater pour créer un journal constantes de balise par Aspect pour obtenir le comportement standard: les balises sont les noms de classe; Lorsque la journalisation est une exigence métier, nous devons la tester. Test des appels statiques sur Android presque impossible; l'enregistreur ne peut pas être injecté par le cadre

Log4J-Android:

  • Pro: moyen standard de se connecter à Java; Compatible avec SLF4J; Capable d'analyser les fichiers de propriétés;
  • Inconvénients: Pas de système intégré de rapport de crash; Il me semble: ce n'est pas couramment utilisé, il pourrait donc être dangereux de l'utiliser;

SLF4J-Android:

  • Pro: Semble être développé par plus de gens comme Log4J-Android; La logger.debug("Some log message. Details: {}", someObject.toString()); est un bon et efficace moyen d'ignorer les concaténations de chaînes si l'enregistreur est éteint; liaison d'enregistreur légère qui délègue à Android.util.Log.
  • Con: balises de journal générées automatiquement de <= 23 caractères en raison d'une restriction de longueur des balises de journal sur la plate-forme Android (par exemple, com.example.myapp.MyClass tag traduit en c*.e*.m*.MyClass), ce qui peut entraîner la même balise de journal pour différentes classes (par exemple, com.example.app.MyClass et com.example.anotherapp.MyClass les deux se traduisent en c*.e*.a*.MyClass); Aucun système intégré de rapport de crash.

En plus de cela, j'aime le comportement d'Androlog, mais je suis un Java dev, familier avec log4j/slf4j. Nous aurons certainement besoin d'un système de rapport de plantage, mais il existe plusieurs cadres pour le rapport de plantage (à côté de de Android rapport de plantage par défaut).

Je peux combiner certains d'entre eux, par exemple utiliser Log4J Android, mais créer un appender pour utiliser le framework androlog, mais tôt ou tard ce sera un gâchis, qui devrait être évité.

Merci pour vos suggestions, j'espère que les résultats aideront à en décider d'autres à l'avenir.

Edit: Comme mentionné ci-dessous, je peux combiner par exemple: log4j-Android avec slf4j (ce que je préfère faire si j'utilise log4j, car le formatage du journal prend en charge ("{}", ...)), mais il le fait ne répond pas à la question. Je dois choisir un cadre, puis je peux le décorer avec la façade SLF4J.

53
Marcell

La meilleure façon. Je pense que c'est d'utiliser l'API SLF4J + une partie de son implémentation.

Pour les applications Android Android, vous pouvez utiliser les éléments suivants:

  1. Android Logger est l'implémentation SLF4J légère mais facile à configurer (<50 Ko).
  2. LOGBack est l'implémentation la plus puissante et optimisée mais sa taille est d'environ 1 Mo.
  3. Tout autre selon votre goût: slf4jandroid , slf4j-Android .
12
stefan.nsk

Veuillez cocher this première réponse

Ça dit:

SLF4J est essentiellement une couche d'abstraction. Ce n'est pas une implémentation de journalisation. Cela signifie que si vous écrivez une bibliothèque et que vous utilisez SLF4J, vous pouvez donner cette bibliothèque à quelqu'un d'autre à utiliser et ils peuvent choisir l'implémentation de journalisation à utiliser avec SLF4J, par exemple. log4j ou l'API de journalisation Java Java. Elle empêche les projets de dépendre de nombreuses API de journalisation simplement parce qu'elles utilisent des bibliothèques qui en dépendent.

Donc, pour résumer: SLF4J ne remplace pas log4j, ils fonctionnent ensemble. Il supprime la dépendance à log4j de votre bibliothèque/application.

5
silwar

J'ai essayé original slf4j.org-Android mais malheureusement ce pot n'a pas pu obtenir de messages de débogage/verbeux à enregistrer car il utilise en interne LOG.isDebugEnabled () pour la sortie de débogage qui semble toujours être fausse .

actuellement j'utilise l'alternative lp0-slf4j-Android implémentation qui utilise un fichier de propriétés avec les paramètres de journalisation où je peux également obtenir des messages de débogage/verbeux si activé.

2
k3b