2010-06-17 4 views
6

Ich habe eine ziemlich große Bibliothek, die ich speziell für die Verwendung in meiner Android-Anwendung entwickelt habe. Die Geschäftslogik selbst ist jedoch nicht von Android abhängig. Um das zu bewahren, habe ich das Commons-Logging in dieser Bibliothek verwendet und entsprechende JUnit-Tests (die ich in Eclipse ausführe).Keine Commons Einloggen bei Android?

Aber jetzt, wo ich beginne, es in eine Aktivität zu integrieren, die ich auf Android starte, kann ich meine Protokollierung nicht zum Laufen bringen. In Eclipse/JUnit hatte ich einfach die jar-Datei von log4j sowie eine log4j.properties-Datei eingefügt. Dies scheint bei der Bereitstellung auf einem Gerät nicht zu funktionieren. Nachdem ich mit dem Versuch, das für mehrere Stunden zu erledigen, zu kämpfen hatte, gab ich auf und versuchte, alle meine Commons-Logging-Sachen durch android.util.Log zu ersetzen. Jetzt kann ich mich am Gerät anmelden ... aber alle JUnit-Tests sind kaputt. Wenn eine JUnit versucht, mit android.util.Log zu loggen, wird eine RuntimeException "Stub!" Ausgelöst.

Ich würde es vorziehen, zu meinem Commons-Logging-Ansatz zurückzukehren .. wenn jemand damit helfen kann .. sonst .. Was kann ich tun, um meine JUnit-Testfälle mit 'android.util.Log' laufen zu lassen?

Vielen Dank im Voraus .. Ich habe mehr als ein paar Stunden damit verbracht und ich würde gerne wieder zu echtem Code schreiben!

Antwort

4

Ich glaube nicht, dass es einen log4j-Port für Android ATM gibt. Allerdings hat Android java.util.logging eingebaut und Commons Logging kann über die Jdk14Logger damit verbunden werden. Wenn Commons Logging auf Android funktioniert, wirst du wahrscheinlich gut gehen.

1

Sie könnten eine Schnittstelle für Ihren eigenen Logger erstellen, der abhängig von der Plattform einen Delegaten für die Protokollierung instanziiert, die auf der Plattform üblich ist. Solange Sie arbeiten und Debuggen sollte dies genug sein, später im Produktionscode auf dem Gerät können Sie einfach einen Logger einfügen, der nichts tut und Sie sparen die ganze Zeit, die Sie brauchen, um den Phonelog zu stören.

5

Wie Qberticus erwähnt, Commons-Logging funktioniert innerhalb von Android. Ich habe dies gerade bestätigt, indem ich die Common-Logging-Bibliothek in ein Android-Projekt legte und Nachrichten auf der INFO-Ebene protokollierte. Bei der Commons-Protokollierung wird standardmäßig das Jdk14-Protokollierungsframework verwendet, das dann an das Android Logging-Subsystem weitergeleitet wird, wobei die Ergebnisse in logcat angezeigt werden können. Das Tag wird auf die Klasse gesetzt, deren Protokoll verwendet wird: Beispielsweise wird das Protokoll von LogFactory.getLog(Foo.class)10 das Tag "Foo" haben.

1

Pauls Lösung hat bei mir nicht funktioniert. Dies führte zu einem Konflikt bei der Kompilierung, da das commons logging jar bereits im SDK enthalten ist. Mein Problem war, dass ich es nicht kompilieren konnte.

Hinzufügen:

extensible.classpath=${sdk.dir}/tools/lib/commons-logging-1.1.1.jar 

meiner ant.properties hat der Trick.

Verwandte Themen