Erste Schritte mit Xiaobai Lernen des Protokollierens

Vorwort

Nur eine Glatze kann stärker werden.
Der Text wurde in mein GitHub-Repository aufgenommen. Willkommen bei Star: https://github.com/ZhongFuCheng3y/3y

Ich erinnere mich, dass ich einen Artikel geschrieben habe, bevor ich das "Alibaba Java Development Manual" gelesen habe. Da ich während meines Selbststudiums nicht viel Kontakt mit dem "Protokoll" hatte, habe ich das "Protokollprotokoll" im "Handbuch" beiseite gelegt.

Und ich habe vorher einen Artikel geschrieben: Was ist der Unterschied zwischen dem Projekt, das ich in der Firma gemacht habe, und dem, das ich in der Schule gemacht habe? In dem Artikel wird erwähnt: Das Projekt des Unternehmens wird nicht über e.printStackTrace () verfügen. Diese Art von Code ist vorhanden. Da die gedruckte Fehlermeldung kein Datum, keine Note usw. enthält, ist die Analyse unpraktisch.

Es ist eine sehr, sehr häufige Operation, Protokolle auf dem Server bei der Arbeit zu überprüfen. Daher habe ich einen Linux-Befehl geschrieben, der zu Beginn häufig bei der Arbeit verwendet wurde, und er hat über die Linux-Befehle gesprochen, die häufig beim Überprüfen von Protokollen verwendet werden.

Ich dachte, da ich schon eine Weile mit dem Protokoll in Kontakt bin, könnte ich genauso gut auf das "Handbuch" zurückblicken, um zu sehen, ob es etwas gibt, auf das ich achten muss, also habe ich diesen Hinweis.

Zum einen die Basis der Java-Protokollierung

Als ich mich vorher selbst unterrichtete, schrieb ich nur den folgenden Code, um Probleme zu beheben:

try {
   // doSomething
} catch (Exception e) {
    e.printStackTrace();
}
----------
// 查看某个数据的值时:
System.out.println(xxxx);

Als ich zur Firma ging, stellte ich fest, dass alle oben genannten Codes fehlten, und der Rest war:

LOGGER.info("begin to run Java3y:{}", id);
----
LOGGER.error("excepiton occurs when run Java3y {}, exception{}", id, e.toString());

Wenn Sie e.printStackTrace (); verwenden, ist es nicht bequem, die im Steuerelement gedruckten Informationen zu analysieren:

Erste Schritte mit Xiaobai Lernen des Protokollierens
Es ist unpraktisch
, die in der Steuerung gedruckten Informationen zu analysieren, und wir zeichnen die Informationen auf der Festplatte des Servers auf. Wenn ein Problem auftritt, finden Sie das entsprechende Protokoll anhand der entsprechenden Informationen (dies ist sehr praktisch für die Fehlerbehebung):

Erste Schritte mit Xiaobai Lernen des Protokollierens

Schauen wir uns die Protokollinformationen auf dem Server an und sehen wir uns an, wie ein allgemeines Protokoll aussieht:

Erste Schritte mit Xiaobai Lernen des Protokollierens
Wie lang ist das Protokoll?
Beispiel: Jetzt meldet jemand, dass der Benutzer die SMS anscheinend nicht empfangen kann. Angesichts der Sendezeit und der Benutzer-ID können wir den Sendestatus des Benutzers in unserem System im Protokoll ermitteln (z. B. das Bild) Oben: Zustand: 81, wir denken, es ist ein erfolgreicher Zustand)

Hier kommt also die Frage, wo wir uns anmelden. Die Antwort finden Sie im "Handbuch":

Protokollieren Sie sorgfältig. In der Produktionsumgebung wird das Debug-Protokoll für die Ausgabe deaktiviert. Das Info-Protokoll wird selektiv ausgegeben. Wenn bei der
Verwendung eine Warnung zum Aufzeichnen des Geschäftsverhaltens nur in der Zeile angezeigt wird, müssen die Probleme mit der Protokollausgabe beachtet, das Explodieren der Serverfestplatte
vermieden und diese Beobachtungen gelöscht werden Log.
Die Ausgabe einer großen Anzahl ungültiger Protokolle trägt nicht zur Verbesserung der Systemleistung und zum schnellen Auffinden von Fehlerpunkten bei. Beachten Sie beim Aufzeichnen von Protokollen Folgendes: Werden diese
Protokolle wirklich angezeigt? Was können Sie tun, wenn Sie dieses Protokoll sehen? Kann es Vorteile bei der Fehlerbehebung bringen?

1Was ist RBI?

Die häufigste Methode zum Protokollieren besteht darin, relevante Informationen während der Programmausführung auszudrucken, um Probleme schnell zu lokalisieren und zu beheben. Ich habe es am Anfang so verstanden, aber es kann ein bisschen erweitert werden.

Für das System, an dem ich arbeite, verwenden wir auch Protokolle, um die Ausführungsverbindung des Systems zu verwalten. Zum Beispiel möchte ich jetzt eine Benachrichtigungsnachricht senden. Die Benachrichtigungsnachricht lautet tatsächlich wie folgt:

Erste Schritte mit Xiaobai Lernen des Protokollierens
So sieht der Benachrichtigungsnachrichtenprozess
aus:

  • Zuerst rief jemand die von meinem RPC bereitgestellte Schnittstelle an (oder ich rief meine eigene Schnittstelle an) und stellte fest, dass dies eine Benachrichtigungsnachricht war. Also habe ich die entsprechende Aufgabe zusammengestellt und asynchron in die Nachrichtenwarteschlange gestellt
  • Ein anderes System nimmt die Aufgabe aus der Nachrichtenwarteschlange, verarbeitet die Aufgabe (z. B. ob sie nachts blockiert ist, ob sie zum Senden gezwungen wird usw.) und ruft dann die HTTP-Schnittstelle auf, um die Aufgabe an den Downstream zu übergeben
  • Es werden tatsächlich viele Dinge stromabwärts erledigt, der gesamte Link ist sehr lang (zum Beispiel muss die SDK-Bibliothek aufgerufen werden, Android und IOS führen unterschiedliche Verarbeitungen durch)
    Erste Schritte mit Xiaobai Lernen des Protokollierens
    ,
    und wir hoffen, dass wir nach Abschluss des Push einige Indikatoren zählen können (Belichtung) Lautstärke, Klickrate, Conversion-Rate usw. Seitdem ist es notwendig, sich in einigen Schlüsselpositionen anzumelden (professioneller Punkt heißt Management)

Sammeln Sie nach dem Öffnen des gesamten Links diese Punkte (Protokolle) und legen Sie sie zum Reinigen / Filtern auf der Echtzeit-Streaming-Plattform (Sturm / Flink) ab. Wenn Sie es in Echtzeit verwenden müssen, legen Sie es in Redis und offline in Hive ab.

2. Manuelle Spezifikation

2.1 Protokollrahmen im Fassadenmodus

[Obligatorisch] Die API im Protokollierungssystem (Log4j, Logback) kann nicht direkt in der Anwendung verwendet werden. Es sollte jedoch die API im Protokollierungsframework
SLF4J verwendet werden, und das Protokollframework des Fassadenmodus wird verwendet, was der Wartung und einheitlichen Protokollverarbeitungsmethoden verschiedener Typen förderlich ist.

Fassadenmodus Ich habe auch schon einmal eine Notiz geschrieben: Lerne den Fassadenmodus in drei Minuten!

Um es ganz klar auszudrücken, ich hoffe, dass ich eine API-Ebene abstrahieren kann, damit beim Wechseln bestimmter Protokoll-Frameworks keine umfangreichen Änderungen erforderlich sind.

Wir können dies verstehen, wenn wir JDBC lernen:

Unabhängig davon, ob ich eine Verbindung zu MySQL, Oracle oder SQL Server herstelle, ist meine Benutzeroberfläche immer dieselbe. Ich muss meine Java-API beim Wechseln von Datenbanken nicht ändern.

Ich habe mir das Projekt des Unternehmens angesehen und SLF4J + Logback übernommen

2.2 Aufrufen der RPC-Schnittstelle mithilfe des Abfangens von Throwable-Klassen

[Obligatorisch] Beim Aufrufen von RPC, Paketen von Drittanbietern oder verwandten Methoden dynamisch generierter Klassen muss die Throwable-
Klasse zum Abfangen von Ausnahmen verwendet werden .

Als ich das Problem zuvor untersucht habe, gab es ein Problem, das nicht behoben werden konnte. Ich habe das Fangmodul während DeBug nicht aufgerufen. Später sagte mein Senior: "Warum versuchst du nicht, zu Throwable zu wechseln?

try {

} catch (Throwable e) {

}

Ich war sehr misstrauisch und sagte: "Warum zu Throwable wechseln? Können wir Exception verwenden, um alle Ausnahmen abzufangen? Exception ist eine Unterklasse von Throwable, aber Exception enthält bereits alle Java-Ausnahmen."

Wie wir alle wissen, hat Throwable zwei Unterklassen:

  • Fehler (normalerweise werden wir dies ignorieren ... Unter normalen Umständen wird ein Fehlerprogramm nicht ausgeführt)
  • Ausnahme
The  Throwable class is the superclass of all errors and exceptions in the Java language

Die obigen Regeln werden auch im "Handbuch" erklärt:

Beschreibung: Die Methode wird über den Reflexionsmechanismus aufgerufen. Wenn die Methode nicht gefunden werden kann, wird eine NoSuchMethodException ausgelöst.
Unter welchen Umständen wird NoSuchMethodError ausgelöst ? Wenn der Konflikttyp des Drittanbieterpakets vorliegt, kann der Arbitrierungsmechanismus dazu führen, dass eine unbeabsichtigte Klassenversion einer Methodensignatur eingeführt wird, die nicht
mit dem Framework für die Änderung des Bytecodes übereinstimmt , oder dass Klassen (z. B. ASM) dynamisch erstellt oder geändert werden. Eine entsprechende Methode wird geändert Unterschrift. Diese Fälle, in denen
der Code kompiliert wird, sind richtig, aber wenn Code ausgeführt wird, wird NoSuchMethodError ausgelöst.

Die grobe Bedeutung ist folgende: Beim Aufrufen von RPC, Paketen von Drittanbietern oder verwandten Methoden dynamisch generierter Klassen kann der Fehler direkt ausgelöst werden, und catch Exception kann nicht abgefangen werden.

Schüler, die Beispiele sehen möchten, können diesen Artikel lesen:

Dieser Artikel scheint ein bisschen kurz ...

Referenzmaterialien (Download-Adresse des Alibaba Development Manual):

Literatur-Empfehlungen:

  • Denken Sie an ein dummes Sicherheitsproblem mit dem Operationsthread
  • Kürzlich erlerntes Front-End-Trennungswissen
  • SQL wird häufig in der Arbeit verwendet
  • Welche Java-Interview- / lernbezogenen Warehouse-Empfehlungen sind auf Github verfügbar?
  • In der Arbeit häufig verwendete Linux-Befehle
  • Was ist der Unterschied zwischen dem Projekt im Unternehmen und dem in der Schule?
  • Verzeichnis | Java3y vollständigstes Verzeichnis
    Erste Schritte mit Xiaobai Lernen des Protokollierens

Mehr als 200 technische Originalartikel,
umfangreiche Videoressourcen,
exquisite Gehirnkarten
, Interviewfragen,
langes Drücken und Scannen des Codes, um zu folgen und zu erhalten

Ich denke du magst

Origin blog.51cto.com/15082392/2590366
Empfohlen
Rangfolge