Skip to main content
Cette documentation décrit comment configurer la journalisation avec l’intégration AppSignal for Node.js.

Configurer la journalisation

🔐 N’envoyez pas d’informations personnelles identifiables (PII) à AppSignal. Filtrez les PII (par exemple, noms, e-mails) des journaux et utilisez un identifiant, un hash ou un identifiant pseudonymisé à la place.

Pour les entités couvertes par la HIPAA, plus d’informations sur la signature d’un Business Associate Agreement (BAA) sont disponibles dans notre documentation Business Add-Ons.
Vous n’avez pas besoin de créer une source de journaux pour envoyer des journaux depuis l’intégration AppSignal for Node.js. Une source de journaux “application” sera créée automatiquement.

Utilisation autonome

Pour utiliser le logger, vous devez importer AppSignal et configurer le logger en utilisant la fonction .logger(). La fonction .logger() accepte deux arguments : group et éventuellement severityThreshold. Si severityThreshold n’est pas fourni, il sera par défaut info.
const { Appsignal } = require("@appsignal/nodejs");

const logger = Appsignal.logger("app");

// with a severity threshold:
const logger = Appsignal.logger("app", "info");
Six niveaux de sévérité sont disponibles : trace, debug, info, log, warn et error, chacun avec sa propre fonction du même nom. Ces fonctions acceptent deux arguments message et attributes. Attributes est utilisé pour les métadonnées et est optionnel. Les messages ne seront enregistrés que si leur niveau de sévérité est supérieur au seuil de sévérité.
logger.info("Log message line");
logger.debug("User logged in", { user_id: 123 });
Notez que si la sévérité du message est inférieure au seuil de sévérité défini lors de l’initialisation du logger, il ne sera pas envoyé à AppSignal. Vous pouvez interroger et filtrer le contenu des messages et les valeurs d’attribut en utilisant notre syntaxe de requête.

Utiliser plusieurs backends de journalisation

Il n’est actuellement pas possible d’envoyer des journaux à plusieurs backends en utilisant le logger standard de Node.js. Pour des configurations plus complexes, nous recommandons d’utiliser une bibliothèque de journalisation comme Winston ou Pino.

Utilisation avec Winston

Si vous utilisez Winston pour enregistrer des messages dans votre application, vous pouvez utiliser notre transport Winston pour envoyer ces journaux à AppSignal. Après avoir importé le transport depuis l’intégration AppSignal, ajoutez-le à la liste des transports dans votre logger Winston :
const winston = require("winston");
const { WinstonTransport } = require("@appsignal/nodejs");

const logger = winston.createLogger({
  transports: [new WinstonTransport({ group: "app" })],
});

Child Logger

Vous pouvez utiliser un child logger pour ajouter des tags supplémentaires aux messages de journal. Vous définissez des tags lors de la création de la constante du child logger ou vous passez des tags en tant que métadonnées lors de l’écriture d’un message de journal. Disons que nous voulons un contexte plus important dans nos journaux des actions d’un utilisateur particulier au sein d’une session spécifique. Dans l’exemple ci-dessous, un child logger pour le groupe background est utilisé pour ajouter sessionID avec les tags supplémentaires drinkID et paymentID fournis en tant que métadonnées lors de la création d’un message de journal, et si un groupe est donné au child, il remplacera celui configuré dans le transport.
const logger = winston.createLogger({...});

const sessionLogger = logger.child({
  group: "background",
  sessionID: user.id,
});

sessionLogger.debug("User logged in");
sessionLogger.info("User ordered coffee", { drinkID: 30, paymentID: 20082 });
sessionLogger.debug("User logged out");

Utiliser plusieurs backends de journalisation

Pour envoyer des journaux à la fois au logger d’AppSignal et à STDOUT, ajoutez un autre transport :
const winston = require("winston");
const { WinstonTransport } = require("@appsignal/nodejs");

const logger = winston.createLogger({
  transports: [
    new WinstonTransport({ group: "app" }),
    new winston.transports.Console(),
  ],
});

Utilisation avec Pino

Si Pino est votre bibliothèque de journalisation préférée, vous pouvez utiliser le transport AppSignal Pino pour envoyer des journaux à AppSignal. L’argument group sera par défaut “app” s’il n’est pas fourni.
import pino from "pino";

const logger = pino({
  transport: {
    targets: [
      { target: "@appsignal/nodejs/pino", options: { group: "my-group" } }
    ],
  },
});

Utiliser plusieurs backends de journalisation

Pour envoyer des journaux à la fois au logger d’AppSignal et à STDOUT, ajoutez une autre cible :
import pino from "pino";

const logger = pino({
  transport: {
    targets: [
        { target: "@appsignal/nodejs/pino", options: { group: "my-group" } },
        { target: 'pino/file', options: {destination: 1} }
    ],
  },
});

Formats

Format détecté automatiquement

Le package AppSignal for Node.js détectera automatiquement le format de la ligne de journal comme JSON, Logfmt ou plaintext par défaut, et en analysera les attributs. Vous n’avez pas besoin de définir manuellement le format du journal, sauf s’il n’est pas correctement détecté. Veuillez également nous le signaler si cela ne fonctionne pas automatiquement.
const { Appsignal } = require("@appsignal/nodejs");

// Plaintext format
const logger = Appsignal.logger("app", "info");
logger.info("This is about the blog");

// Logfmt format
const logger = Appsignal.logger("app", "info");
logger.info("category=blog This is about the blog");

// JSON format
const logger = Appsignal.logger("app", "info");
logger.info('{"category": "blog", "message": "This is about the blog"}');

Logfmt

Le logger AppSignal peut être configuré explicitement pour attendre que la ligne soit formatée en Logfmt et en analyser les attributs. Utilisez cette option lorsque vous utilisez une version plus ancienne du package AppSignal for Node.js, qui ne prend pas en charge la détection automatique du format. Le format de journal peut être spécifié lors de la création d’un logger. Lors de l’initialisation du logger AppSignal, passez la valeur "logfmt" comme troisième argument.
const { Appsignal } = require("@appsignal/nodejs");

const logger = Appsignal.logger("app", "info", "logfmt");
logger.info("category=blog this is about the blog");
Dans l’exemple ci-dessus, un attribut category filtrable avec la valeur “blog” sera enregistré.

JSON

Le logger AppSignal peut être configuré explicitement pour attendre que la ligne soit formatée en JSON et en analyser les attributs. Utilisez cette option lorsque vous utilisez une version plus ancienne du package AppSignal for Node.js, qui ne prend pas en charge la détection automatique du format. Le format de journal peut être spécifié lors de la création d’un logger. Lors de l’initialisation du logger AppSignal, passez la valeur "json" comme troisième argument.
const { Appsignal } = require("@appsignal/nodejs");

const logger = Appsignal.logger("app", "info", "json");
logger.info('{"category": "blog", "message": "this is about the blog"}');
Dans l’exemple ci-dessus, un attribut category filtrable avec la valeur “blog” sera enregistré.

Filtrage des journaux

Vous pouvez utiliser l’option de configuration ignoreLogs pour ignorer les lignes de journal en fonction de leur message. Consultez notre guide Ignore Logs pour en savoir plus.

Besoin d’aide ?

Après avoir configuré votre application Node.js pour envoyer des journaux, les journaux devraient apparaître dans AppSignal. Si vous avez des doutes sur cette étape ou si AppSignal ne reçoit aucun journal, vous pouvez toujours nous contacter pour obtenir de l’aide. Nous vous aiderons à remettre les choses sur la bonne voie !