2010-12-02 13 views
5

Ich bin dabei, meine Android-Anwendung zu beenden. Am Ende habe ich festgestellt, dass ich Bündel von Logging-Anweisungen wurde unter Verwendung, wie zB:Logging-Strategie

Log.d(TAG, "Blah-blah"); 

Die Frage ist: für Produktionsfreigabe, was soll ich mit ihnen machen?

  1. Gerade Kommentar/Streifen Protokollanweisungen
  2. Tun Sie etwas anderes anspruchsvoller? Wie früher Log4J-Eigenschaften

Bitte teilen Sie Ihre Erfahrung.

Antwort

0

ich es so, so dass der Compiler alle Protokollierung entfernen, wenn DEBUG falsch ist:

if (Constant.DEBUG) Log.d(TAG, "mein gott, state is roflcopter"); 
+1

Diese Methode ist nicht wirklich falsch, und es ist eine bewährte Methode, wenn Sie mich fragen, wie es Ihren Code aufbläht. –

+0

Logging soll so einfach wie möglich sein. Später kann jemand Log.d in Log.w ändern, aber vergiss Constant.DEBUG zu ändern (oder umgekehrt). – inazaruk

+0

Vielleicht haben Sie einen Punkt, alles sollte so einfach wie möglich sein. Aber es ist besser, das Problem mit ein bisschen Komplexität zu lösen, als gar nichts zu tun. Dies ist die beste Lösung, die ich gefunden habe, da ich die Bloat als minimal empfinde. – pgsandstrom

4

Sie können die Protokollierungsanweisungen während der Erstellung mit einem Verschleierungstool entfernen. Details finden Sie unter here.

+0

OK, ich Option untersuchen. Wie auch immer, gibt es irgendwelche Möglichkeiten wie Eigenschaften in Log4J? – barmaley

+0

Soweit ich weiß, werden alle Nachrichten protokolliert. Dann kann der Betrachter des Protokolls auswählen, welche Nachrichten angezeigt werden sollen. Sie können Debugging-Meldungen nicht deaktivieren, um in das Protokoll zu gelangen, indem Sie einfach eine Eigenschaft bearbeiten. – kgiannakakis

0

Hängt davon ab. Wenn Sie erwarten, dass die Anwendung häufig abstürzt, dann fügen Sie beispielsweise eine der Absturzberichterstattungsbibliotheken hinzu, aber was auch immer Sie entscheiden, lassen Sie sie nicht einfach mit den Methoden Log.d() frei.

0

Ich habe nicht auf Android erleben speziell, aber ich würde nur die Protokollierung staements im Code und wiederum verlassen Ausloggen in der Log4j-Eigenschaftendatei. Vielleicht möchten Sie sogar eine Protokollierung aktiviert lassen, damit Ihre App im Falle eines Absturzes nützliche Protokolle generiert.

Wenn Sie befürchten, dass die Erstellung der Protokollanweisung zu rechenintensiv ist (z. B. toString für eine große Sammlung aufrufen), können Sie dieses Muster verwenden.

if (Log.isDebugEnabled()) { 
    Log.Debug(bigCollection.toString()); 
} 
1

Es gibt ein neues Projekt, das log4j auf Android ermöglicht. Die Verwendung von lo4gj über slf4j ist möglich. Es bietet auch einen Appender für LogCat. Siehe Projekt android-logging-log4j oder log4j support in android

+0

Woo-hoo! Log4J ist da! Vielen Dank! – barmaley

1

Ich habe eine Bibliothek für diesen speziellen Zweck erstellt. Es kann hier gefunden werden - LumberJack. Sie können es mit Jitpack und Gradle installieren (Bitte überprüfen Sie README.md).

Nach der Installation finden Sie alle Log Anrufe ändern müssen, um Anrufe Lumberjack (zB. LumberJack.d() statt Log.d() etc.)

Stichworte sind optional und standardmäßig auf „Lumberjack“. Sie können das Standard-Tag selbst festlegen.

Sie können die Filterung jederzeit mit der Methode LumberJack.setLogLevel() ändern. Um alle Protokolle zu entfernen, können Sie einfach LogLevel auf LogLevel.None setzen.

LumberJack.setLogLevel(LogLevel.None); 

Wenn Sie also nur alle Logcat-Spamming-Logs löschen möchten, müssen Sie nur den Loglevel-Filter einstellen.

Optional können Sie wählen, dass Sie sich mit demselben Filtermechanismus in eine Textdatei anstelle von logcat einloggen.

0

Wenn Sie in der Android-Version nicht etwas protokollieren möchten, können Sie automatisch generierte BuildConfig verwenden.Sehen Sie mehr darüber hier: https://developer.android.com/studio/build/gradle-tips.html. Sie können auch weitere Informationen in dieser Frage lesen: BuildConfig file in android - Purpose and Possibilities.

Also in Ihrem Code, den Sie einfach so etwas schreiben:

if (BuildConfig.DEBUG) { 
    //your code just for development goes here 
}