Heim > Web-Frontend > js-Tutorial > Hauptteil

LogTape .eleased: Was ist neu?

Linda Hamilton
Freigeben: 2024-09-24 16:31:43
Original
360 Leute haben es durchsucht

LogTape .eleased: What

LogTape, eine strukturierte Protokollierungsbibliothek ohne Abhängigkeiten für JavaScript und TypeScript, hat v0.6.0 veröffentlicht. Was hat sich geändert?

Überschreibt die Senken des übergeordneten Loggers

Eine der Funktionen von LogTape ist die Vererbung von Senken durch hierarchische Kategorien. Wenn Sie beispielsweise zwei Logger wie folgt einrichten:

import { configure, getConsoleSink, getFileSink } from "@logtape/logtape";

await configure({
  sinks: {
    console: getConsoleSink(),
    file:    getFileSink("app.log"),
  },
  loggers: [
    { category: ["app"],           level: "debug", sinks: ["file"] },
    { category: ["app", "module"], level: "debug", sinks: ["console"] },
  ],
});
Nach dem Login kopieren

In den Logger ["app"] geschriebene Protokolle werden nur in der Datei app.log gespeichert, in den Logger ["app", "module"] geschriebene Protokolle werden jedoch in beiden gespeichert die Datei app.log und Ausgabe an die Konsole. Dies liegt daran, dass der Logger [„App“, „Modul“] die Senken von seiner übergeordneten Kategorie [„App“] erbt.

Aber manchmal möchten Sie dieses Verhalten möglicherweise nicht. Ab LogTape 0.6.0 können Sie jetzt die Senken des übergeordneten Loggers überschreiben. Wenn Sie beispielsweise die Option „parentSinks: „override““ für den untergeordneten Logger wie folgt aktivieren:

await configure({
  sinks: { /* omitted; same as above */ },
  loggers: [
    { category: ["app"],           level: "debug", sinks: ["file"] },
    { category: ["app", "module"], level: "debug", sinks: ["console"], parentSinks: "override" },
  ],
});
Nach dem Login kopieren

In den Logger ["app"] geschriebene Protokolle werden nur in der Datei app.log gespeichert, und in den Logger ["app", "module"] geschriebene Protokolle werden nur in ausgegeben die Konsole. Dies liegt daran, dass der untergeordnete Logger [„app“, „module“] die Senken des [„app“]-Loggers überschrieben hat.

Der Standardwert ist natürlich parentSinks: „inherit“. Wenn Sie die Option also nicht angeben, verhält es sich wie zuvor.

Wenn Sie neugierig auf den Hintergrund dieser Funktionserweiterung sind, lesen Sie bitte GitHub-Problem Nr. 15.

Erlauben Sie führende/nachgestellte Leerzeichen für Platzhalter in Nachrichtenvorlagen

In früheren Versionen, wenn Sie sich so angemeldet haben:

logger.info("Hello, { name }!", { name: "Alice" });
Nach dem Login kopieren
Nach dem Login kopieren

Entgegen den Erwartungen wurde ein Protokoll von Hallo, undefiniert! würde entstehen. Dies lag daran, dass der Platzhalter {name} Leerzeichen enthielt und daher nach einer Eigenschaft „name“ anstelle von „name“ gesucht wurde. Mit anderen Worten: Sie mussten die Leerzeichen entweder wie folgt aus dem Platzhalter entfernen:

logger.info("Hello, {name}!", { name: "Alice" });
Nach dem Login kopieren
Nach dem Login kopieren

Oder fügen Sie die gleichen Leerzeichen wie folgt zum eigentlichen Eigenschaftsnamen hinzu:

logger.info("Hello, { name }!", { " name ": "Alice" });
Nach dem Login kopieren

Obwohl es sich hierbei nicht unbedingt um einen Fehler handelte, handelte es sich um ein fehleranfälliges Verhalten, abhängig von den Programmiergewohnheiten.

Ab LogTape 0.6.0 wird jedoch nach einem Eigenschaftsnamen ohne Leerzeichen gesucht, auch wenn am Anfang und Ende des Platzhalters Leerzeichen stehen. Wenn Sie sich beispielsweise wie folgt anmelden:

logger.info("Hello, { name }!", { name: "Alice" });
Nach dem Login kopieren
Nach dem Login kopieren

Wie erwartet ein Protokoll von Hello, Alice! wird erstellt.

Wenn es jedoch eine Eigenschaft gibt, die einschließlich der Leerzeichen genau übereinstimmt, wird diese priorisiert. Wenn Sie sich beispielsweise wie folgt anmelden:

logger.info("Hello, { name }!", { name: "Alice", " name ": "Bob" });
Nach dem Login kopieren

Hallo, Bob! wird anstelle von Hallo, Alice! protokolliert.

Wenn Sie neugierig auf den Hintergrund dieser Funktionserweiterung sind, lesen Sie bitte GitHub-Problem Nr. 16.

LogRecord.rawMessage-Eigenschaft

LogRecord ist ein Datentyp, der ein Protokoll darstellt, bevor es von LogTape ausgegeben und formatiert wird.

Während die Eigenschaft „LogRecord.message“ bereits vorhanden war, enthielt diese Eigenschaft das Ergebnis, nachdem die Platzhalter in der Nachrichtenvorlage durch tatsächliche Eigenschaftswerte ersetzt wurden. Dies reichte in den meisten Fällen aus, aber wenn das Protokollausgabeziel (Senke) ein anderes Protokollierungssystem ist, möchten Sie möglicherweise die ursprüngliche Nachrichtenvorlage und die Eigenschaftswerte separat ausgeben, damit das empfangende Protokollierungssystem die Platzhalter in der Nachrichtenvorlage durch Eigenschaften ersetzen kann Werte direkt eingeben.

Die in LogTape 0.6.0 hinzugefügte LogRecord.rawMessage ist eine Eigenschaft für genau diesen Zweck, die den ursprünglichen Zustand der Nachrichtenvorlage mit nicht ersetzten Platzhaltern enthält. Wenn Sie sich beispielsweise wie folgt anmelden:

logger.info("Hello, {name}!", { name: "Alice" });
Nach dem Login kopieren
Nach dem Login kopieren

Während LogRecord.message den Wert ["Hallo, ", "Alice", "!"] enthält, enthält LogRecord.rawMessage den Wert "Hallo, {Name}!".

Wenn Sie neugierig auf den Hintergrund dieser Funktionserweiterung sind, lesen Sie bitte GitHub-Problem Nr. 17.

Anpassbare integrierte Textformatierer

Ein Textformatierer ist eine Schnittstelle, die bestimmt, wie jedes Protokoll in Stream-Senken, Datei-Senken usw. in Text formatiert wird. Die eigentliche Typdefinition ist recht einfach:

export type TextFormatter = (record: LogRecord) => string;
Nach dem Login kopieren

Es kann jedoch jedes Mal umständlich sein, einen Textformatierer direkt zu definieren, daher verfügt LogTape über integrierte defaultTextFormatter und ansiColorFormatter, die Sie verwenden können. Da bisher keine zusätzliche Konfiguration möglich war, musste man das vorgegebene Format so übernehmen, wie es ist. Wenn Ihnen beispielsweise nicht gefiel, dass Protokollebenen wie „Warnung“ als dreibuchstabige Abkürzungen wie WRN ausgegeben wurden, mussten Sie TextFormatter von Grund auf implementieren.

Ab LogTape 0.6.0 können Sie jedoch über die Funktionen getDefaultTextFormatter() und getAnsiColorFormatter() verschiedene Formatierungseinstellungen nach Ihren Wünschen anpassen, ohne TextFormatter von Grund auf implementieren zu müssen.

For example, if you want to represent log levels like "warning" as a single uppercase letter W, you can configure it like this:

const myFormatter = getDefaultTextFormatter({ level: "L" });
Nach dem Login kopieren

Or if you want to omit the date and timezone from the timestamp and only show the time, you can configure it like this:

const myFormatter = getDefaultTextFormatter({ timestamp: "time" });
Nach dem Login kopieren

For descriptions of more formatting options, please refer to the related documentation.

If you're curious about the background of this feature addition, please refer to GitHub issue #13.

Get it from JSR and npm

LogTape 0.6.0 is already available on JSR and npm, so get it now!

deno add @logtape/logtape@0.6.0  # Deno
npm  add @logtape/logtape@0.6.0  # npm
pnpm add @logtape/logtape@0.6.0  # pnpm
yarn add @logtape/logtape@0.6.0  # Yarn
bun  add @logtape/logtape@0.6.0  # Bun
Nach dem Login kopieren

Happy logging!

Das obige ist der detaillierte Inhalt vonLogTape .eleased: Was ist neu?. 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