Question

Quelles solutions de journalisation existent pour j2me?

Je suis particulièrement intéressé par l’exclusion facile de la journalisation pour "release". version, pour avoir un paquet plus petit & amp; empreinte mémoire.

Était-ce utile?

La solution

Si vous utilisez le prétraitement et l'obscurcissement avec Proguard, vous pouvez avoir une simple classe de journalisation.

public class Log {
  public static void debug(final String message) {
    //#if !release.build
    System.out.println(message);
    //#endif
  }
}

Ou connectez-vous où vous le souhaitez. Désormais, si la propriété release.build est définie sur true, ce code sera mis en commentaire, ce qui donnera une méthode vide. Proguard supprimera tous les usages de la méthode vide - Dans les versions en vigueur, tous les messages de débogage seront supprimés.

Modifier:

En réfléchissant au niveau de la bibliothèque (je travaille sur la cartographie de la bibliothèque J2ME), j’ai probablement trouvé une meilleure solution.

public class Log {
  private static boolean showDebug;

  public static void debug(final String message) {
    if (showDebug) {
      System.out.println(message);
    }
  }

  public static void setShowDebug(final boolean show) {
    showDebug = show;
  }
}

De cette manière, le développeur final peut activer les niveaux de journalisation à l'intérieur de la bibliothèque qui l'intéressent. Si rien n'est activé, tout le code de journalisation sera supprimé dans l'obscurcissement du produit final. Doux:)

/ JaanusSiim

Autres conseils

MicroLog est une valeur sûre. C'est une petite bibliothèque de journalisation pour Java ME (J2ME) comme Log4j. Il prend en charge la journalisation sur console, fichier, RecordStore, Canvas, Formulaire, Bluetooth, un port série (Bluetooth, IR, USB), Socket (y compris SSL), UDP, Syslog, MMS, SMS, courrier électronique ou Amazon S3. .

http://sourceforge.net/projects/microlog/

Vous pouvez utiliser les effets -assumenoside de proguard pour supprimer complètement votre classe de journalisation:

-assumenosideeffects public class logger.Logger {*;}

Plutôt que de devoir prétraiter.

Les téléphones Series60 et UIQ dotés d'une machine virtuelle Sun modifiée par Symbian disposent de la redirection de sortie standard.

Vous pouvez non seulement capturer System.out mais également Throwable.printStackTrace ().

Sur les premiers combinés, vous auriez besoin d'écrire une application C ++ qui s'accroche au processus du serveur de bibliothèque standard. Symbian a créé l'application Redirector qui pouvait capturer la sortie standard de la machine virtuelle sur une console ou un fichier.

Sur les nouveaux combinés, un " redirect: // " Le protocole GCF introduit permettait de lire la sortie standard de la machine virtuelle dans un objet Java byte [] ou String (vous voudriez le faire dans un MIDlet séparé) et l’application Redirector a été réécrite en Java.

Sur la dernière machine virtuelle J9 utilisée dans les combinés Series60 3rd Edition Feature Pack 2 (et ultérieurs), vous devrez peut-être essayer "redirect: // test". à la place.

J'ai utilisé MIDPLogger un niveau acceptable dans une application de production. Bien que j’ai trouvé qu’il était plus utile après l’intégration dans l’application que comme un autre Midlet dans la suite ou autre. J'ai également trouvé MicroLog , mais je ne l'ai pas utilisé de manière très détaillée.

J'ai écrit un optimiseur de bytecode et, en raison du format des fichiers de classe, vous pouvez indiquer le codage UTF de classname & amp; fonction qui vous permet de générer des journaux avec MyClass.someFunc () (vous pouvez traiter la signature si vous voulez obtenir les types) ce qui vous permet de faire quelque chose comme le débogage de style C en utilisant LINE & amp; FILE macros.

L'utilisation de la compilation conditionnelle de la classe logger ne résout pas le problème de la suppression complète des instructions de journalisation, car vous enregistrez souvent plus d'une simple chaîne. Vous allez rechercher des valeurs de variables, puis les assembler en chaînes, par exemple: WhateverLog.log ("Loaded" + someclass.size () + "foos").

Désormais, si vous laissez uniquement de côté le corps de WhateverLog.log (comme indiqué dans la solution acceptée), vous conserverez tout un tas de code inutile, notamment la concaténation de chaînes (et donc une création de StringBuffer). C'est pourquoi vous feriez mieux d'utiliser un outil de post-traitement de code octet tel que proguard (déjà mentionné). Les effets -assumenoside de Proguard permettront à son optimiseur de supprimer non seulement les instructions de journalisation, mais également tout le code dont les résultats ne seraient utilisés que par l'appel de journalisation.

La structure LWUIT de J2ME fournit le formulaire de journalisation dans lequel l’instruction peut être consignée. Vous pouvez ajouter le journal à chaque endroit susceptible de générer une exception.

Exemple: Log.getInstance (). showLog (); En ajoutant la ligne ci-dessus, vous pouvez suivre l’enregistrement dans les périphériques J2ME.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top