Die verschiedenen LogCat
Methoden sind:
Log.v(); // Verbose
Log.d(); // Debug
Log.i(); // Info
Log.w(); // Warning
Log.e(); // Error
Welche Situationen sind für die Verwendung der einzelnen Protokollierungsarten geeignet? Ich weiß, dass es vielleicht nur ein bisschen Semantik ist und es vielleicht nicht wirklich wichtig ist, aber für das LogCat
Filtern in Android Studio und Eclipse wäre es schön zu wissen, dass ich zu den richtigen Zeiten die richtigen Methoden verwende.
Verbose
Protokollierung. Es ist das, was Sie verwenden, wenn Sie jede mögliche logische Operation ausgeben möchten.Log.wtf
ich ein paar Mal nachgesehen und wirklich laut gelacht hatte. Meiner Meinung nach sollten alle APIs so etwas in sich habenDie verschiedenen Methoden sind Prioritätsangaben. Wie Sie sie aufgelistet haben, gehen sie vom am wenigsten zum wichtigsten über. Ich denke, wie Sie sie speziell Debug-Protokollen in Ihrem Code zuordnen, hängt von der Komponente oder App ab, an der Sie arbeiten, sowie davon, wie Android sie mit verschiedenen Build-Varianten (eng, userdebug und user) behandelt. Ich habe eine Menge Arbeit in den nativen Dämonen in Android geleistet, und so mache ich es. Es gilt möglicherweise nicht direkt für Ihre App, aber es gibt möglicherweise Gemeinsamkeiten. Wenn meine Erklärung vage klingt, dann deshalb, weil einiges davon eher eine Kunst als eine Wissenschaft ist. Meine Grundregel lautet, so effizient wie möglich zu sein, sicherzustellen, dass Sie Ihre Komponente angemessen debuggen können, ohne die Leistung des Systems zu beeinträchtigen, und immer nach Fehlern zu suchen und diese zu protokollieren.
V - Ausdrucke des Zustands in verschiedenen Intervallen oder bei Ereignissen, die von meiner Komponente verarbeitet werden. Möglicherweise auch sehr detaillierte Ausdrucke der Nutzdaten von Nachrichten / Ereignissen, die meine Komponente empfängt oder sendet.
D - Details zu kleineren Ereignissen, die in meiner Komponente auftreten, sowie zu Nutzdaten von Nachrichten / Ereignissen, die meine Komponente empfängt oder sendet.
I - Der Header aller Nachrichten / Ereignisse, die meine Komponente empfängt oder sendet, sowie aller wichtigen Teile der Nutzlast, die für den Betrieb meiner Komponente kritisch sind.
W - Alles, was passiert, ist ungewöhnlich oder verdächtig, aber nicht unbedingt ein Fehler.
E - Fehler, dh Dinge, die nicht passieren sollen, wenn die Dinge so funktionieren, wie sie sollten.
Der größte Fehler, den die Leute machen, ist, dass sie Dinge wie V, D und I überbeanspruchen, aber niemals W oder E verwenden. Wenn ein Fehler per Definition nicht auftreten soll oder nur sehr selten auftreten sollte, ist er extrem billig für Sie, um eine Nachricht zu protokollieren, wenn es auftritt. Wenn Sie jedoch jedes Mal, wenn jemand eine Taste drückt, eine Log.i () ausführen, missbrauchen Sie die gemeinsam genutzte Protokollierungsressource. Verwenden Sie natürlich den gesunden Menschenverstand und seien Sie vorsichtig mit Fehlerprotokollen für Dinge, die außerhalb Ihrer Kontrolle liegen (wie Netzwerkfehler) oder solche, die in engen Schleifen enthalten sind.
Vielleicht schlecht
Gut
Vor diesem Hintergrund können Sie die Basisprotokollierungsstufe für Ihren Code umso mehr einschränken, je näher Ihr Code der "Produktionsbereitschaft" kommt (Sie benötigen V in Alpha, D in Beta, I in der Produktion oder möglicherweise sogar W in der Produktion ). Sie sollten einige einfache Anwendungsfälle durchgehen und die Protokolle anzeigen, um sicherzustellen, dass Sie immer noch verstehen, was passiert, wenn Sie eine restriktivere Filterung anwenden. Wenn Sie mit dem folgenden Filter arbeiten, sollten Sie immer noch in der Lage sein zu erkennen, was Ihre App tut, aber möglicherweise nicht alle Details erhalten.
quelle
Der Quellcode enthält einige grundlegende Anleitungen:
Für mehr Details ist Kurtis 'Antwort tot auf. Ich möchte nur hinzufügen: Protokollieren Sie keine persönlich identifizierbaren oder privaten Informationen unter
INFO
(WARN
/ERROR
). Andernfalls können Fehlerberichte oder andere Elemente, die die Protokollierung enthalten, verschmutzt sein.quelle
Sie können LOG verwenden wie:
Beispielcode:
quelle
Ich denke, der Sinn dieser verschiedenen Arten der Protokollierung ist, wenn Sie möchten, dass Ihre App ihre eigenen Protokolle grundsätzlich selbst filtert. Verbose könnte also sein, absolut alles Wichtige in Ihrer App zu protokollieren, dann würde die Debug-Ebene eine Teilmenge der ausführlichen Protokolle protokollieren, und dann würde die Info-Ebene eine Teilmenge der Debug-Protokolle protokollieren. Wenn Sie zu den Fehlerprotokollen gelangen, möchten Sie nur alle aufgetretenen Fehler protokollieren. Es gibt auch eine Debug-Stufe namens Fatal, wenn etwas den Fan in Ihrer App wirklich trifft.
Im Allgemeinen haben Sie Recht, es ist im Grunde genommen willkürlich und es liegt an Ihnen, zu definieren, was als Debug-Protokoll im Vergleich zu Informationen, gegenüber Fehlern usw. usw. betrachtet wird.
quelle
Obwohl diese Frage bereits beantwortet wurde, fehlen meiner Meinung nach Beispiele in der Antwort, die beantwortet wurde.
Deshalb werde ich hier das bringen, was ich in einem Blog-Beitrag "Android Log Levels" geschrieben habe.
Ausführlich
Ist die niedrigste Protokollierungsstufe. Wenn Sie mit dem Protokollieren verrückt werden wollen, dann gehen Sie mit diesem Level. Ich habe nie verstanden, wann ich Verbose und wann Debug verwenden soll. Der Unterschied klang für mich sehr willkürlich. Ich habe es endlich verstanden, als ich auf den Quellcode von Android¹ hingewiesen wurde. "Verbose sollte nur während der Entwicklung in eine Anwendung kompiliert werden." Jetzt ist mir klar, wann immer Sie entwickeln und löschbare Protokolle hinzufügen möchten, die Ihnen während der Entwicklung helfen, ist es nützlich, die ausführliche Ebene zu haben, mit der Sie alle diese Protokolle löschen können, bevor Sie in die Produktion gehen.
Debuggen
Ist für Debugging-Zwecke. Dies ist die niedrigste Stufe, die in der Produktion sein sollte. Die hier enthaltenen Informationen sollen bei der Entwicklung helfen. In den meisten Fällen deaktivieren Sie dieses Protokoll in der Produktion, damit weniger Informationen gesendet werden, und aktivieren dieses Protokoll nur, wenn Sie ein Problem haben. Ich möchte mich anmelden, um alle Informationen zu debuggen, die die App vom Server sendet / empfängt (achten Sie darauf, keine Passwörter zu protokollieren !!!). Dies ist sehr hilfreich, um zu verstehen, ob der Fehler im Server oder in der App liegt. Ich mache auch Protokolle über das Ein- und Aussteigen wichtiger Funktionen.
Die Info
Für Informationsmeldungen, die den Fortschritt der Anwendung hervorheben. Zum Beispiel, wenn die Initialisierung der App abgeschlossen ist. Fügen Sie Informationen hinzu, wenn der Benutzer zwischen Aktivitäten und Fragmenten wechselt. Protokollieren Sie jeden API-Aufruf, aber nur wenige Informationen wie URL, Status und Antwortzeit.
Warnung
Wenn eine potenziell schädliche Situation vorliegt.
Dieses Protokoll ist meiner Erfahrung nach ein schwieriges Level. Wann haben Sie eine potenziell schädliche Situation? Im Allgemeinen oder dass es in Ordnung ist oder dass es ein Fehler ist. Ich persönlich benutze dieses Level nicht viel. Beispiele dafür, wann ich es benutze, sind normalerweise, wenn Dinge mehrmals passieren. Beispielsweise hat ein Benutzer mehr als dreimal ein falsches Passwort. Dies kann daran liegen, dass er das Passwort dreimal falsch eingegeben hat. Es kann auch daran liegen, dass ein Problem mit einem Zeichen vorliegt, das in unserem System nicht akzeptiert wird. Gleiches gilt für Netzwerkverbindungsprobleme.
Error
Fehlerereignisse. Die Anwendung kann nach dem Fehler weiterhin ausgeführt werden. Dies kann zum Beispiel sein, wenn ich einen Nullzeiger bekomme, wo ich keinen bekommen soll. Beim Parsen der Antwort des Servers ist ein Fehler aufgetreten. Ich habe einen Fehler vom Server erhalten.
WTF (Was für ein schrecklicher Fehler)
Schwerwiegend sind schwerwiegende Fehlerereignisse, die zum Beenden der Anwendung führen. In Android ist das Fatal in Wirklichkeit die Fehlerstufe, der Unterschied besteht darin, dass es auch den Fullstack hinzufügt.
quelle
Die Android Studio-Website hat kürzlich (glaube ich) einige Ratschläge gegeben, welche Art von Nachrichten von verschiedenen Protokollebenen zu erwarten sind, die zusammen mit Kurtis 'Antwort nützlich sein können:
quelle