Heim > Web-Frontend > js-Tutorial > Hauptteil

Einführung impliziter Kontexte in LogTape .0

Patricia Arquette
Freigeben: 2024-10-31 04:41:30
Original
518 Leute haben es durchsucht

Introducing implicit contexts in LogTape .0

Ich freue mich, die Veröffentlichung von LogTape 0.7.0 bekannt zu geben, das implizite Kontexte einführt – eine leistungsstarke neue Funktion, die es einfacher denn je macht, kontextbezogene Informationen zu Ihren Protokollen hinzuzufügen gesamte Anwendung.

Was sind implizite Kontexte?

Stellen Sie sich vor, Sie bearbeiten eine HTTP-Anfrage in Ihrer Anwendung. Sie möchten, dass jede während der Anforderungsverarbeitung generierte Protokollnachricht die Anforderungs-ID enthält, unabhängig davon, wo in Ihrer Codebasis das Protokoll erstellt wird. Vor impliziten Kontexten müssten Sie Folgendes tun:

  1. Übergeben Sie die Anforderungs-ID bei jedem Funktionsaufruf
  2. Erstellen Sie für jedes Modul einen neuen Logger mit Kontext
  3. Oder verwenden Sie globale Variablen (die ihre eigenen Probleme haben)

Mit impliziten Kontexten können Sie jetzt den Kontext am Anfang Ihres Anforderungshandlers festlegen, und jede Protokollnachricht in diesem Ausführungskontext enthält diese Informationen automatisch. Hier ist ein einfaches Beispiel:

function handleRequest(requestId: string) {
  withContext({ requestId }, () => {
    // Any log message in this function or any function it calls
    // will automatically include the requestId
    processRequest();
  });
}

function processRequest() {
  // Note that we don't need to pass the requestId explicitly
  getLogger("processor").info(
    "Processing request: {requestId}"
  );
}
Nach dem Login kopieren

Wie funktioniert es?

Implizite Kontexte nutzen die kontextlokalen Speichermechanismen der zugrunde liegenden Laufzeit (wie AsyncLocalStorage von Node.js), um Kontextinformationen während der gesamten Ausführung Ihres Codes beizubehalten. Dies bedeutet, dass der Kontext auch bei asynchronen Vorgängen ordnungsgemäß beibehalten wird.

Um implizite Kontexte in Ihrer Anwendung zu ermöglichen, müssen Sie LogTape mit einem kontextlokalen Speicher konfigurieren:

import { AsyncLocalStorage } from "node:async_hooks";
import { configure } from "@logtape/logtape";

await configure({
  // ... other settings ...
  contextLocalStorage: new AsyncLocalStorage(),
});
Nach dem Login kopieren

Verschachtelte Kontexte und Priorität

Eine der leistungsstarken Eigenschaften impliziter Kontexte besteht darin, dass sie verschachtelt werden können. Wenn Sie Kontexte verschachteln, erbt der innere Kontext Werte vom äußeren Kontext und kann diese überschreiben:

function handleRequest(requestId: string) {
  withContext({ requestId, stage: "request" }, () => {
    // stage is "request" here
    processUser(1234);
  });
}

function processUser(userId: number) {
  withContext({ userId, stage: "user" }, () => {
    // stage is "user" here, but requestId is still available
    getLogger("processor").info(
      "Processing user: {userId} for request: {requestId}"
    );
  });
}
Nach dem Login kopieren

Wenn es um die Auflösung von Kontextwerten geht, folgt LogTape einer klaren Prioritätenreihenfolge:

  1. Explizite Eigenschaften in der Protokollnachricht haben höchste Priorität
  2. Der über Logger.with() festgelegte explizite Kontext hat zweite Priorität
  3. Impliziter Kontext, der über withContext() festgelegt wird, hat die niedrigste Priorität

Laufzeitunterstützung

Ab Oktober 2024 werden implizite Kontexte unterstützt in:

  • Node.js
  • Deno
  • Brötchen

Webbrowser unterstützen noch keine impliziten Kontexte, da sie auf die Implementierung des TC39-Async-Context-Vorschlags warten.

Anwendungsfälle

Implizite Kontexte sind besonders wertvoll für:

  1. Anfrageverfolgung: Fügen Sie Anfrage-IDs, Benutzer-IDs oder Sitzungs-IDs zu allen Protokollen innerhalb einer Anfrage hinzu
  2. Transaktionsüberwachung: Verfolgen Sie Transaktions-IDs über mehrere Vorgänge hinweg
  3. Fehlerkontext: Stellen Sie sicher, dass Fehlerprotokolle immer relevante Kontextinformationen enthalten
  4. Leistungsüberwachung: Fügen Sie Zeitinformationen über mehrere Vorgänge hinweg hinzu
  5. Mandantenkontext: Verfolgen Sie in mandantenfähigen Anwendungen Mandanteninformationen über alle Vorgänge hinweg

Best Practices

Berücksichtigen Sie bei der Verwendung impliziter Kontexte die folgenden Best Practices:

  1. Verwenden Sie implizite Kontexte für Informationen, die wirklich zum gesamten Ausführungskontext gehören
  2. Halten Sie die Kontextdaten übersichtlich – denken Sie daran, dass sie während der gesamten Ausführung übertragen werden
  3. Verwenden Sie aussagekräftige, konsistente Schlüsselnamen in Ihrer gesamten Anwendung
  4. Erwägen Sie die Verwendung von TypeScript, um die Konsistenz der Kontextstruktur sicherzustellen
  5. Dokumentieren Sie die erwartete Kontextstruktur für Ihre Anwendung

Migrationsleitfaden

Wenn Sie LogTape bereits verwenden, ist das Upgrade auf die Verwendung impliziter Kontexte unkompliziert:

  1. Update auf LogTape 0.7.0
  2. Fügen Sie kontextlokalen Speicher zu Ihrer LogTape-Konfiguration hinzu
  3. Identifizieren Sie Orte, an denen Kontext manuell weitergegeben wird
  4. Ersetzen Sie durch withContext()-Aufrufe an geeigneten Grenzen

Abschluss

Implizite Kontexte in LogTape 0.7.0 bieten eine leistungsstarke Möglichkeit, kontextbezogene Informationen zu Ihren Protokollen hinzuzufügen, ohne Ihren Code zu überladen oder den Kontext manuell durch Ihren Aufrufstapel zu leiten. Sie sind besonders wertvoll in Webdiensten, APIs und anderen Anwendungen, bei denen es wichtig ist, den Kontext über alle Vorgänge hinweg zu verfolgen.

Ich bin gespannt, wie Sie diese Funktion nutzen werden, um die Protokollierung und Beobachtbarkeit Ihrer Anwendung zu verbessern. Probieren Sie es aus und teilen Sie mir Ihre Meinung mit!

Weitere Informationen finden Sie in der vollständigen Dokumentation zu impliziten Kontexten.

Das obige ist der detaillierte Inhalt vonEinführung impliziter Kontexte in LogTape .0. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage