Frage

Was Logging-Lösungen für J2ME gibt es?

Ich bin speziell interessiert sich leicht außer für „Release“ -Version der Anmeldung, ein kleineres Paket & Speicherbedarf zu haben.

War es hilfreich?

Lösung

Wenn Sie mit Vorverarbeitung und Verschleierung mit Proguard, dann können Sie eine einfache Protokollierung Klasse haben.

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

Oder Anmeldung, wo immer Sie wollen. Nun, wenn release.build Eigenschaft auf true gesetzt ist, wird dieser Code kommentiert werden, dass in einem leeren Verfahren führen wird. Proguard alle Verwendungen von leeren Methode entfernen -. In der Tat Release-Build werden alle Debug-Meldungen entfernt haben

Edit:

Das Nachdenken über es auf Bibliotheksebene (ich arbeite Mapping J2ME Bibliothek) Ich habe, wahrscheinlich, fand eine bessere Lösung.

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;
  }
}

Auf diese Weise End-Entwickler können Protokollebenen innerhalb Bibliothek ermöglichen, dass er / sie interessiert ist. Wenn nichts aktiviert wird, werden alle Logging-Code in Endprodukt Verschleierungs entfernt werden. Sweet:)

/ JaanusSiim

Andere Tipps

MicroLog ist sicher Wette. Es ist eine kleine Logging-Bibliothek für Java ME (J2ME) wie Log4j. Es hat Unterstützung für die Protokollierung zu trösten, Datei, Recordstor, Leinwand, Form, Bluetooth, eine serielle Schnittstelle (Bluetooth, Infrarot, USB), Socket (inkl SSL), UDP, Syslog, MMS, SMS, E-Mail oder auf Amazon S3 .

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

Sie können die -assumenosideaffects in proguard verwenden, um Ihre Logging-Klasse COMPLETLEY entfernen:

-assumenosideeffects public class logger.Logger {*;}

Anstatt zu Vorprozess mit.

Die Series60 und UIQ-Handy, das eine Sun virtuelle Maschine von Symbian geändert hat sich Standard-Ausgabeumleitung haben.

Sie können nicht nur erfassen System.out aber Throwable.printStackTrace () auch funktioniert.

Am frühen Handys, würden Sie benötigen einen C ++ Anwendung zu schreiben, die in der Standardbibliothek Serverprozess hakt. Symbian produzierte die Redirector-Anwendung, die die VM Standardausgabe in eine Konsole oder eine Datei erfassen können.

Bei neueren Handys, eine „Umleitung: //“ GCF-Protokoll wurde eingeführt, dass die VM der Standardausgabe in einen Java-byte [] oder String-Objekt lesen konnte (Sie wollen in einem separaten MIDlet zu tun) und die Redirector-Anwendung wurde neu geschrieben in Java.

Auf dem neuesten J9 VM verwendet in Series60 3rd Edition Feature Pack 2 Handys (und höher), müssen Sie möglicherweise "umleiten: // Tests" versuchen. Statt

Ich habe verwendet MIDPLogger zu einem gewissen akzeptablen Niveau in einer Produktionsanwendung , obwohl ich gefunden habe, es hat mehr Gebrauch, nachdem sie in die Anwendung zu integrieren und nicht als eine andere Midlet in Suite oder so weiter. Ich fand auch MicroLog aber haben es nicht in größerem Detail verwendet wird.

ich einen Bytecode-Optimierer schrieb, und wegen des Formats von Klassendateien können Sie die UTF-Codierung von Klassenname & Funktion zeigen, die Sie Ausgabeprotokolle mit MyClass.someFunc ermöglicht () (Sie können die Signatur bearbeiten, wenn Sie möchten, erhalten die Typen), die Sie so etwas wie die C-Stil-Debug mit LINE & Datei Makros.

tun können

Mit dem bedingten Kompilierung der Loggers Klasse löst nicht das Problem der vollständigen Entfernung von Logging-Anweisungen, weil Sie oft mehr einloggen werden als eine einfache Zeichenfolge. Sie werden Variablenwerte nachschlagen und sie dann in Strings montieren, z.B .: WhateverLog.log ( "Loaded" + someclass.size () + "Foos").

Nun, wenn Sie nur den Körper von WhateverLog.log auslassen (wie in der akzeptierten Lösung gezeigt), werden Sie immer noch eine Menge unnötigen Code in, einschließlich String-Verkettung (und damit eine String Schöpfung) verlassen. Deshalb sollten Sie besser ein Bytecode Nachverarbeitung Tool wie proguard (bereits erwähnt) verwenden würden. Proguard des -assumenosideeffects ermöglicht seinen Optimierer die Protokollierung Aussagen nicht nur zu entfernen, sondern auch den gesamten Code, deren Ergebnisse nur durch die Protokollierung Aufruf verwendet werden würde.

LWUIT Rahmen des J2ME bieten die Protokollierung Form, die ein Protokoll der Aussage im Inneren haben. Sie können das Protokoll an jedem hinzufügen und jeden Ort, den Sie mögen denken, die Ausnahme erzeugen.

Beispiel: Log.getInstance () ShowLog ();. Durch das Hinzufügen der obige Zeile Sie in der Lage kann die Protokollierung in den J2ME-Geräten verfolgen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top