"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > LogTape .eleased : Quoi de neuf ?

LogTape .eleased : Quoi de neuf ?

Publié le 2024-11-13
Parcourir:538

LogTape .eleased: What

LogTape, une bibliothèque de journalisation structurée sans dépendance pour JavaScript et TypeScript, a publié la v0.6.0. Qu'est-ce qui a changé ?

Remplacement des récepteurs de l'enregistreur parent

L'une des fonctionnalités de LogTape est l'héritage des récepteurs via des catégories hiérarchiques. Par exemple, si vous configurez deux enregistreurs comme ceci :

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"] },
  ],
});

Les journaux écrits dans l'enregistreur ["app"] seront uniquement enregistrés dans le fichier app.log, mais les journaux écrits dans l'enregistreur ["app", "module"] seront enregistrés dans les deux le fichier app.log et la sortie sur la console. En effet, l'enregistreur ["app", "module"] hérite des récepteurs de sa catégorie parent ["app"].

Cependant, il arrive parfois que vous ne souhaitiez pas ce comportement. À partir de LogTape 0.6.0, vous pouvez désormais remplacer les récepteurs de l'enregistreur parent. Par exemple, si vous activez l'option parentSinks: "override" pour l'enregistreur enfant comme ceci :

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

Les journaux écrits dans l'enregistreur ["app"] seront uniquement enregistrés dans le fichier app.log, et les journaux écrits dans l'enregistreur ["app", "module"] ne seront émis que vers la console. En effet, l'enregistreur enfant ["app", "module"] a remplacé les récepteurs de l'enregistreur ["app"].

Bien sûr, la valeur par défaut est parentSinks : "inherit", donc si vous ne spécifiez pas l'option, elle se comportera comme avant.

Si vous êtes curieux de connaître le contexte de cet ajout de fonctionnalité, veuillez vous référer au numéro 15 de GitHub.

Autoriser les espaces de début et de fin pour les espaces réservés dans les modèles de message

Dans les versions précédentes, si vous vous connectiez comme ceci :

logger.info("Hello, { name }!", { name: "Alice" });

Contrairement aux attentes, un log de Hello, indéfini ! serait créé. En effet, l'espace réservé { nom } incluait des espaces, il recherchait donc une propriété " nom " au lieu de " nom ". En d'autres termes, vous deviez soit supprimer les espaces de l'espace réservé comme ceci :

logger.info("Hello, {name}!", { name: "Alice" });

Ou ajoutez les mêmes espaces au nom de la propriété comme ceci :

logger.info("Hello, { name }!", { " name ": "Alice" });

Bien qu'il ne s'agisse pas strictement d'un bug, il s'agissait d'un comportement sujet aux erreurs en fonction des habitudes de codage.

Cependant, à partir de LogTape 0.6.0, même s'il y a des espaces au début et à la fin de l'espace réservé, il recherchera un nom de propriété sans espaces. Par exemple, si vous vous connectez comme ceci :

logger.info("Hello, { name }!", { name: "Alice" });

Comme prévu, un journal de Bonjour, Alice ! sera créé.

Cependant, s'il existe une propriété qui correspond exactement, y compris les caractères d'espace, elle sera prioritaire. Par exemple, si vous vous connectez comme ceci :

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

Bonjour Bob ! sera enregistré à la place de Bonjour, Alice !.

Si vous êtes curieux de connaître le contexte de cet ajout de fonctionnalité, veuillez vous référer au numéro 16 de GitHub.

Propriété LogRecord.rawMessage

LogRecord est un type de données qui représente un journal avant qu'il ne soit généré et formaté par LogTape.

Bien que la propriété LogRecord.message existait déjà, cette propriété contenait le résultat après que les espaces réservés dans le modèle de message aient été remplacés par les valeurs de propriété réelles. Cela était suffisant dans la plupart des cas, mais lorsque la destination de sortie du journal (récepteur) est un autre système de journalisation, vous souhaiterez peut-être afficher le modèle de message d'origine et les valeurs de propriété séparément, permettant au système de journalisation de réception de remplacer les espaces réservés dans le modèle de message par la propriété. valeurs directement.

Le LogRecord.rawMessage ajouté dans LogTape 0.6.0 est une propriété exactement à cet effet, contenant l'état d'origine du modèle de message avec des espaces réservés non remplacés. Par exemple, si vous vous connectez comme ceci :

logger.info("Hello, {name}!", { name: "Alice" });

Alors que LogRecord.message contiendra la valeur ["Bonjour, ", "Alice", "!"], LogRecord.rawMessage contiendra la valeur "Bonjour, {nom} !".

Si vous êtes curieux de connaître le contexte de cet ajout de fonctionnalité, veuillez vous référer au numéro 17 de GitHub.

Formateurs de texte intégrés personnalisables

Un formateur de texte est une interface qui détermine comment chaque journal sera formaté en texte dans les récepteurs de flux, les récepteurs de fichiers, etc. La définition réelle du type est assez simple :

export type TextFormatter = (record: LogRecord) => string;

Cependant, il peut être fastidieux de définir un formateur de texte directement à chaque fois, c'est pourquoi LogTape intègre defaultTextFormatter et ansiColorFormatter que vous pouvez utiliser. Jusqu'à présent, aucune configuration supplémentaire n'étant possible, il fallait accepter le format prédéterminé tel quel. Par exemple, si vous n'aimiez pas que les niveaux de journalisation tels que « avertissement » soient affichés sous forme d'abréviations à trois lettres comme WRN, vous deviez implémenter TextFormatter à partir de zéro.

Cependant, à partir de LogTape 0.6.0, vous pouvez personnaliser divers paramètres de formatage à votre guise via les fonctions getDefaultTextFormatter() et getAnsiColorFormatter() sans avoir à implémenter TextFormatter à partir de zéro.

Par exemple, si vous souhaitez représenter les niveaux de journalisation tels que « avertissement » sous la forme d'une seule lettre W majuscule, vous pouvez le configurer comme ceci :

const myFormatter = getDefaultTextFormatter({ level: "L" });

Ou si vous souhaitez omettre la date et le fuseau horaire de l'horodatage et afficher uniquement l'heure, vous pouvez le configurer comme ceci :

const myFormatter = getDefaultTextFormatter({ timestamp: "time" });

Pour des descriptions d'autres options de formatage, veuillez vous référer à la documentation associée.

Si vous êtes curieux de connaître le contexte de cet ajout de fonctionnalité, veuillez vous référer au numéro 13 de GitHub.

Obtenez-le de JSR et npm

LogTape 0.6.0 est déjà disponible sur JSR et npm, alors téléchargez-le maintenant !

deno add @logtape/[email protected]  # Deno
npm  add @logtape/[email protected]  # npm
pnpm add @logtape/[email protected]  # pnpm
yarn add @logtape/[email protected]  # Yarn
bun  add @logtape/[email protected]  # Bun

Bonne journalisation !

Déclaration de sortie Cet article est reproduit sur : https://dev.to/hongminhee/logtape-060-released-whats-new-17od?1 En cas de violation, veuillez contacter [email protected] pour le supprimer.
Dernier tutoriel Plus>

Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.

Copyright© 2022 湘ICP备2022001581号-3