> ## Documentation Index
> Fetch the complete documentation index at: https://docs.appsignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Logging vanuit Node.js

export const VersionRequirements = ({versions = []}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const boundaries = {
    upper: " or lower",
    exact: "",
    lower: " or higher"
  };
  const containerStyle = {
    marginTop: "0.5rem",
    marginBottom: "1.5rem"
  };
  const lineStyle = {
    display: "block",
    margin: "0 0 0.35rem 0",
    fontSize: "0.875rem",
    lineHeight: "1.4"
  };
  const pillBaseStyle = {
    display: "inline-block",
    padding: "0.1em 0.4em",
    borderRadius: "0.25rem",
    border: "1px solid",
    fontFamily: "ui-monospace, SFMono-Regular, Menlo, monospace",
    fontSize: "0.85em",
    fontWeight: 500
  };
  const pillColors = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#e9d5ff",
      color: "#9333ea"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#99f6e4",
      color: "#0d9488"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde68a",
      color: "#ca8a04"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#bbf7d0",
      color: "#16a34a"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#bfdbfe",
      color: "#2563eb"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fecaca",
      color: "#dc2626"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fed7aa",
      color: "#ea580c"
    }
  };
  const defaultPillColor = {
    background: "#f4f4f5",
    borderColor: "#e4e4e7",
    color: "#52525b"
  };
  const getPillStyle = name => ({
    ...pillBaseStyle,
    ...pillColors[name] || defaultPillColor
  });
  const getBoundText = bound => {
    return boundaries[bound] || boundaries.lower;
  };
  return <div style={containerStyle}>
      {versions.map((v, i) => <p key={`${v.name}-${v.version}-${v.bound || "lower"}-${i}`} style={lineStyle}>
          This feature requires{" "}
          <code style={getPillStyle(v.name)}>{v.name}</code> version {v.version}
          {getBoundText(v.bound)}.
        </p>)}
    </div>;
};

export const Compatibility = ({versions = [], label = "Available in"}) => {
  if (!Array.isArray(versions) || versions.length === 0) {
    return null;
  }
  const defaultPillStyle = {
    borderColor: "#d4d4d8",
    background: "#f4f4f5",
    color: "#3f3f46"
  };
  const pillStyles = {
    "AppSignal for Elixir": {
      background: "#f3e8ff",
      borderColor: "#d8b4fe",
      color: "#6b21a8"
    },
    "AppSignal for Front-end": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Go": {
      background: "#ccfbf1",
      borderColor: "#5eead4",
      color: "#115e59"
    },
    "AppSignal for JavaScript": {
      background: "#fef9c3",
      borderColor: "#fde047",
      color: "#854d0e"
    },
    "AppSignal for Node.js": {
      background: "#dcfce7",
      borderColor: "#86efac",
      color: "#166534"
    },
    "AppSignal for Python": {
      background: "#dbeafe",
      borderColor: "#93c5fd",
      color: "#1e40af"
    },
    "AppSignal for Ruby": {
      background: "#fee2e2",
      borderColor: "#fca5a5",
      color: "#991b1b"
    },
    "AppSignal for Rust": {
      background: "#ffedd5",
      borderColor: "#fdba74",
      color: "#9a3412"
    }
  };
  const getPillStyle = name => ({
    ...defaultPillStyle,
    ...pillStyles[name] || ({})
  });
  return <div className="not-prose my-4 rounded-lg border border-zinc-200 bg-zinc-50 px-4 py-3 text-sm dark:border-white/10 dark:bg-white/5">
      <div className="flex flex-wrap items-center gap-x-2 gap-y-1">
        <span className="font-semibold text-zinc-700 dark:text-zinc-200">
          {label}:
        </span>
        {versions.map((v, i) => <span key={`${v.name}-${v.version}-${i}`} className="inline-flex items-center gap-1 rounded-full border px-2 py-0.5 text-xs font-medium" style={getPillStyle(v.name)}>
            <span>{v.name}</span>
            <span className="opacity-70">
              {v.version}
              {v.exact ? "" : "+"}
            </span>
          </span>)}
      </div>
    </div>;
};

<VersionRequirements
  versions={[
{ name: "AppSignal for Node.js", version: "3.0.1" }
]}
/>

Deze documentatie beschrijft hoe u logging configureert met de AppSignal for Node.js-integratie.

## Logging configureren

<Warning>
  🔐 Stuur geen <strong>Persoonlijk Identificeerbare Informatie (PII)</strong> naar AppSignal. Filter PII (bijv. namen, e-mailadressen) uit logs en gebruik in plaats daarvan een ID, hash of gepseudonimiseerde identificator. <br /> <br /> Voor **onder HIPAA vallende entiteiten** vindt u meer informatie over het ondertekenen van een Business Associate Agreement (BAA) in onze [documentatie over Business Add-Ons](/support/business-add-ons).
</Warning>

U hoeft geen logbron aan te maken om logs te versturen vanuit de AppSignal for Node.js-integratie. Er wordt automatisch een "application"-logbron aangemaakt.

### Zelfstandig gebruik

Om de logger te gebruiken, moet u AppSignal importeren en de logger instellen met de functie `.logger()`.

De functie `.logger()` accepteert twee argumenten: `group` en optioneel `severityThreshold`. Als `severityThreshold` niet wordt opgegeven, is de standaardwaarde `info`.

<CodeGroup>
  ```javascript Node.js theme={null}
  const { Appsignal } = require("@appsignal/nodejs");

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

  // with a severity threshold:
  const logger = Appsignal.logger("app", "info");
  ```
</CodeGroup>

Er zijn zes severity-niveaus beschikbaar: `trace`, `debug`, `info`, `log`, `warn` en `error`, elk met zijn eigen functie met dezelfde naam. Deze functies accepteren twee argumenten: `message` en `attributes`. Attributes wordt gebruikt voor metadata en is optioneel.

Berichten worden alleen gelogd als hun severity-niveau boven de severity-drempel ligt.

<CodeGroup>
  ```javascript Node.js theme={null}
  logger.info("Log message line");
  logger.debug("User logged in", { user_id: 123 });
  ```
</CodeGroup>

Houd er rekening mee dat als de severity van het bericht onder de severity-drempel ligt die is ingesteld bij het initialiseren van de logger, het niet naar AppSignal wordt verstuurd.

U kunt op berichtinhoud en attribuutwaarden filteren en opvragen met behulp van onze [zoeksyntaxis](/logging/query-syntax).

#### Meerdere logging-backends gebruiken

Het is momenteel niet mogelijk om logs naar meerdere backends te sturen met de standaard logger van Node.js. Voor complexere opstellingen raden wij u aan een logging-bibliotheek zoals Winston of Pino te gebruiken.

### Gebruik met Winston

<Compatibility versions={[{ name: "AppSignal for Node.js", version: "3.0.3" }]} />

Als u Winston gebruikt om berichten in uw applicatie te loggen, kunt u onze Winston-transport gebruiken om die logs naar AppSignal te sturen. Nadat u de transport vanuit de AppSignal-integratie hebt geïmporteerd, voegt u deze toe aan de lijst met transports in uw Winston-logger:

<CodeGroup>
  ```javascript Node.js theme={null}
  const winston = require("winston");
  const { WinstonTransport } = require("@appsignal/nodejs");

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

#### Child Logger

U kunt een child logger gebruiken om aanvullende tags aan logberichten toe te voegen. U definieert tags bij het aanmaken van de child logger-constante of geeft tags als metadata door bij het schrijven van een logbericht. Stel dat wij meer context willen in onze logs van de acties van een bepaalde gebruiker binnen een specifieke sessie. In het onderstaande voorbeeld wordt een child logger voor de `background`-groep gebruikt om `sessionID` toe te voegen met de aanvullende tags `drinkID` en `paymentID` die als metadata worden verstrekt bij het aanmaken van een logbericht, en als een groep aan de child wordt meegegeven, overschrijft die de groep die in de transport is ingesteld.

<CodeGroup>
  ```javascript Node.js theme={null}
  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");
  ```
</CodeGroup>

#### Meerdere logging-backends gebruiken

Om logs naar zowel de logger van AppSignal als naar `STDOUT` te sturen, voegt u nog een transport toe:

<CodeGroup>
  ```javascript JavaScript theme={null}
  const winston = require("winston");
  const { WinstonTransport } = require("@appsignal/nodejs");

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

### Gebruik met Pino

<Compatibility versions={[{ name: "AppSignal for Node.js", version: "3.5.4" }]} />

Als Pino uw voorkeur logging-bibliotheek is, kunt u de AppSignal Pino-transport gebruiken om logs naar AppSignal te sturen.

Het group-argument is standaard "app" als het niet wordt opgegeven.

<CodeGroup>
  ```javascript Node.js theme={null}
  import pino from "pino";

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

#### Meerdere logging-backends gebruiken

Om logs naar zowel de logger van AppSignal als naar `STDOUT` te sturen, voegt u nog een target toe:

<CodeGroup>
  ```javascript Node.js theme={null}
  import pino from "pino";

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

## Formaten

### Automatisch gedetecteerd formaat

<Compatibility versions={[{ name: "AppSignal for Node.js", version: "3.7.2" }]} />

Het AppSignal for Node.js-pakket detecteert het formaat van de logregel standaard automatisch als JSON, Logfmt of plaintext en parseert er attributen uit.
U hoeft het logformaat niet handmatig in te stellen, tenzij het niet correct wordt gedetecteerd.
[Laat het ons ook weten](mailto:support@appsignal.com?subject=Log%20format%20auto%20detection%20not%20working) als dit niet automatisch werkt.

<CodeGroup>
  ```javascript Node.js theme={null}
  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"}');
  ```
</CodeGroup>

### Logfmt

<Compatibility versions={[{ name: "AppSignal for Node.js", version: "3.0.11" }]} />

De AppSignal Logger kan expliciet worden geconfigureerd om te verwachten dat de regel in Logfmt-formaat is en hier attributen uit te parsen.
Gebruik deze optie wanneer u een oudere versie van het AppSignal for Node.js-pakket gebruikt die geen [automatische formaatdetectie](#auto-detected-format) ondersteunt.

Het logformaat kan worden opgegeven bij het aanmaken van een logger.
Geef bij het initialiseren van de AppSignal-logger de waarde `"logfmt"` als derde argument door.

<CodeGroup>
  ```javascript Node.js theme={null}
  const { Appsignal } = require("@appsignal/nodejs");

  const logger = Appsignal.logger("app", "info", "logfmt");
  logger.info("category=blog this is about the blog");
  ```
</CodeGroup>

In het bovenstaande voorbeeld wordt een filterbaar category-attribuut met de waarde "blog" gelogd.

### JSON

<Compatibility versions={[{ name: "AppSignal for Node.js", version: "3.0.11" }]} />

De AppSignal Logger kan expliciet worden geconfigureerd om te verwachten dat de regel in JSON-formaat is en hier attributen uit te parsen.
Gebruik deze optie wanneer u een oudere versie van het AppSignal for Node.js-pakket gebruikt die geen [automatische formaatdetectie](#auto-detected-format) ondersteunt.

Het logformaat kan worden opgegeven bij het aanmaken van een logger.
Geef bij het initialiseren van de AppSignal-logger de waarde `"json"` als derde argument door.

<CodeGroup>
  ```javascript Node.js theme={null}
  const { Appsignal } = require("@appsignal/nodejs");

  const logger = Appsignal.logger("app", "info", "json");
  logger.info('{"category": "blog", "message": "this is about the blog"}');
  ```
</CodeGroup>

In het bovenstaande voorbeeld wordt een filterbaar category-attribuut met de waarde "blog" gelogd.

## Logs filteren

U kunt [de configuratieoptie `ignoreLogs`](/nodejs/3.x/configuration/options#option-ignorelogs) gebruiken om logregels op basis van hun bericht te negeren. Zie [onze gids Logs negeren](/guides/filter-data/ignore-logs) voor meer informatie.

## Hulp nodig?

Nadat u uw Node.js-applicatie hebt geconfigureerd om logs te versturen, zouden er logs in AppSignal moeten verschijnen. Als u twijfelt over deze stap of AppSignal geen logs ontvangt, kunt u altijd [contact opnemen](mailto:support@appsignal.com) voor hulp. Wij helpen u graag weer op weg!
