Skip to content

Rapport de diagnostic

[Stable: 2 - Stable]

Stable: 2 Stabilité: 2 - Stable

[Historique]

VersionChangements
v23.3.0Ajout de l'option --report-exclude-env pour exclure les variables d'environnement de la génération de rapports.
v22.0.0, v20.13.0Ajout de l'option --report-exclude-network pour exclure les opérations réseau qui peuvent ralentir la génération de rapports dans certains cas.

Fournit un résumé de diagnostic au format JSON, écrit dans un fichier.

Le rapport est destiné à une utilisation de développement, de test et de production, afin de capturer et de conserver des informations pour la détermination des problèmes. Il comprend des traces de pile JavaScript et natives, des statistiques de tas, des informations sur la plateforme, l'utilisation des ressources, etc. Avec l'option de rapport activée, les rapports de diagnostic peuvent être déclenchés en cas d'exceptions non gérées, d'erreurs fatales et de signaux utilisateur, en plus d'être déclenchés par programme via des appels d'API.

Un exemple complet de rapport généré lors d'une exception non interceptée est fourni ci-dessous à titre de référence.

json
{
  "header": {
    "reportVersion": 5,
    "event": "exception",
    "trigger": "Exception",
    "filename": "report.20181221.005011.8974.0.001.json",
    "dumpEventTime": "2018-12-21T00:50:11Z",
    "dumpEventTimeStamp": "1545371411331",
    "processId": 8974,
    "cwd": "/home/nodeuser/project/node",
    "commandLine": [
      "/home/nodeuser/project/node/out/Release/node",
      "--report-uncaught-exception",
      "/home/nodeuser/project/node/test/report/test-exception.js",
      "child"
    ],
    "nodejsVersion": "v12.0.0-pre",
    "glibcVersionRuntime": "2.17",
    "glibcVersionCompiler": "2.17",
    "wordSize": "64 bit",
    "arch": "x64",
    "platform": "linux",
    "componentVersions": {
      "node": "12.0.0-pre",
      "v8": "7.1.302.28-node.5",
      "uv": "1.24.1",
      "zlib": "1.2.11",
      "ares": "1.15.0",
      "modules": "68",
      "nghttp2": "1.34.0",
      "napi": "3",
      "llhttp": "1.0.1",
      "openssl": "1.1.0j"
    },
    "release": {
      "name": "node"
    },
    "osName": "Linux",
    "osRelease": "3.10.0-862.el7.x86_64",
    "osVersion": "#1 SMP Wed Mar 21 18:14:51 EDT 2018",
    "osMachine": "x86_64",
    "cpus": [
      {
        "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
        "speed": 2700,
        "user": 88902660,
        "nice": 0,
        "sys": 50902570,
        "idle": 241732220,
        "irq": 0
      },
      {
        "model": "Intel(R) Core(TM) i7-6820HQ CPU @ 2.70GHz",
        "speed": 2700,
        "user": 88902660,
        "nice": 0,
        "sys": 50902570,
        "idle": 241732220,
        "irq": 0
      }
    ],
    "networkInterfaces": [
      {
        "name": "en0",
        "internal": false,
        "mac": "13:10:de:ad:be:ef",
        "address": "10.0.0.37",
        "netmask": "255.255.255.0",
        "family": "IPv4"
      }
    ],
    "host": "test_machine"
  },
  "javascriptStack": {
    "message": "Error: *** test-exception.js: throwing uncaught Error",
    "stack": [
      "at myException (/home/nodeuser/project/node/test/report/test-exception.js:9:11)",
      "at Object.<anonymous> (/home/nodeuser/project/node/test/report/test-exception.js:12:3)",
      "at Module._compile (internal/modules/cjs/loader.js:718:30)",
      "at Object.Module._extensions..js (internal/modules/cjs/loader.js:729:10)",
      "at Module.load (internal/modules/cjs/loader.js:617:32)",
      "at tryModuleLoad (internal/modules/cjs/loader.js:560:12)",
      "at Function.Module._load (internal/modules/cjs/loader.js:552:3)",
      "at Function.Module.runMain (internal/modules/cjs/loader.js:771:12)",
      "at executeUserCode (internal/bootstrap/node.js:332:15)"
    ]
  },
  "nativeStack": [
    {
      "pc": "0x000055b57f07a9ef",
      "symbol": "report::GetNodeReport(v8::Isolate*, node::Environment*, char const*, char const*, v8::Local<v8::String>, std::ostream&) [./node]"
    },
    {
      "pc": "0x000055b57f07cf03",
      "symbol": "report::GetReport(v8::FunctionCallbackInfo<v8::Value> const&) [./node]"
    },
    {
      "pc": "0x000055b57f1bccfd",
      "symbol": " [./node]"
    },
    {
      "pc": "0x000055b57f1be048",
      "symbol": "v8::internal::Builtin_HandleApiCall(int, v8::internal::Object**, v8::internal::Isolate*) [./node]"
    },
    {
      "pc": "0x000055b57feeda0e",
      "symbol": " [./node]"
    }
  ],
  "javascriptHeap": {
    "totalMemory": 5660672,
    "executableMemory": 524288,
    "totalCommittedMemory": 5488640,
    "availableMemory": 4341379928,
    "totalGlobalHandlesMemory": 8192,
    "usedGlobalHandlesMemory": 3136,
    "usedMemory": 4816432,
    "memoryLimit": 4345298944,
    "mallocedMemory": 254128,
    "externalMemory": 315644,
    "peakMallocedMemory": 98752,
    "nativeContextCount": 1,
    "detachedContextCount": 0,
    "doesZapGarbage": 0,
    "heapSpaces": {
      "read_only_space": {
        "memorySize": 524288,
        "committedMemory": 39208,
        "capacity": 515584,
        "used": 30504,
        "available": 485080
      },
      "new_space": {
        "memorySize": 2097152,
        "committedMemory": 2019312,
        "capacity": 1031168,
        "used": 985496,
        "available": 45672
      },
      "old_space": {
        "memorySize": 2273280,
        "committedMemory": 1769008,
        "capacity": 1974640,
        "used": 1725488,
        "available": 249152
      },
      "code_space": {
        "memorySize": 696320,
        "committedMemory": 184896,
        "capacity": 152128,
        "used": 152128,
        "available": 0
      },
      "map_space": {
        "memorySize": 536576,
        "committedMemory": 344928,
        "capacity": 327520,
        "used": 327520,
        "available": 0
      },
      "large_object_space": {
        "memorySize": 0,
        "committedMemory": 0,
        "capacity": 1520590336,
        "used": 0,
        "available": 1520590336
      },
      "new_large_object_space": {
        "memorySize": 0,
        "committedMemory": 0,
        "capacity": 0,
        "used": 0,
        "available": 0
      }
    }
  },
  "resourceUsage": {
    "rss": "35766272",
    "free_memory": "1598337024",
    "total_memory": "17179869184",
    "available_memory": "1598337024",
    "maxRss": "36624662528",
    "constrained_memory": "36624662528",
    "userCpuSeconds": 0.040072,
    "kernelCpuSeconds": 0.016029,
    "cpuConsumptionPercent": 5.6101,
    "userCpuConsumptionPercent": 4.0072,
    "kernelCpuConsumptionPercent": 1.6029,
    "pageFaults": {
      "IORequired": 0,
      "IONotRequired": 4610
    },
    "fsActivity": {
      "reads": 0,
      "writes": 0
    }
  },
  "uvthreadResourceUsage": {
    "userCpuSeconds": 0.039843,
    "kernelCpuSeconds": 0.015937,
    "cpuConsumptionPercent": 5.578,
    "userCpuConsumptionPercent": 3.9843,
    "kernelCpuConsumptionPercent": 1.5937,
    "fsActivity": {
      "reads": 0,
      "writes": 0
    }
  },
  "libuv": [
    {
      "type": "async",
      "is_active": true,
      "is_referenced": false,
      "address": "0x0000000102910900",
      "details": ""
    },
    {
      "type": "timer",
      "is_active": false,
      "is_referenced": false,
      "address": "0x00007fff5fbfeab0",
      "repeat": 0,
      "firesInMsFromNow": 94403548320796,
      "expired": true
    },
    {
      "type": "check",
      "is_active": true,
      "is_referenced": false,
      "address": "0x00007fff5fbfeb48"
    },
    {
      "type": "idle",
      "is_active": false,
      "is_referenced": true,
      "address": "0x00007fff5fbfebc0"
    },
    {
      "type": "prepare",
      "is_active": false,
      "is_referenced": false,
      "address": "0x00007fff5fbfec38"
    },
    {
      "type": "check",
      "is_active": false,
      "is_referenced": false,
      "address": "0x00007fff5fbfecb0"
    },
    {
      "type": "async",
      "is_active": true,
      "is_referenced": false,
      "address": "0x000000010188f2e0"
    },
    {
      "type": "tty",
      "is_active": false,
      "is_referenced": true,
      "address": "0x000055b581db0e18",
      "width": 204,
      "height": 55,
      "fd": 17,
      "writeQueueSize": 0,
      "readable": true,
      "writable": true
    },
    {
      "type": "signal",
      "is_active": true,
      "is_referenced": false,
      "address": "0x000055b581d80010",
      "signum": 28,
      "signal": "SIGWINCH"
    },
    {
      "type": "tty",
      "is_active": true,
      "is_referenced": true,
      "address": "0x000055b581df59f8",
      "width": 204,
      "height": 55,
      "fd": 19,
      "writeQueueSize": 0,
      "readable": true,
      "writable": true
    },
    {
      "type": "loop",
      "is_active": true,
      "address": "0x000055fc7b2cb180",
      "loopIdleTimeSeconds": 22644.8
    },
    {
      "type": "tcp",
      "is_active": true,
      "is_referenced": true,
      "address": "0x000055e70fcb85d8",
      "localEndpoint": {
        "host": "localhost",
        "ip4": "127.0.0.1",
        "port": 48986
      },
      "remoteEndpoint": {
        "host": "localhost",
        "ip4": "127.0.0.1",
        "port": 38573
      },
      "sendBufferSize": 2626560,
      "recvBufferSize": 131072,
      "fd": 24,
      "writeQueueSize": 0,
      "readable": true,
      "writable": true
    }
  ],
  "workers": [],
  "environmentVariables": {
    "REMOTEHOST": "SUPPRIMÉ",
    "MANPATH": "/opt/rh/devtoolset-3/root/usr/share/man:",
    "XDG_SESSION_ID": "66126",
    "HOSTNAME": "test_machine",
    "HOST": "test_machine",
    "TERM": "xterm-256color",
    "SHELL": "/bin/csh",
    "SSH_CLIENT": "SUPPRIMÉ",
    "PERL5LIB": "/opt/rh/devtoolset-3/root//usr/lib64/perl5/vendor_perl:/opt/rh/devtoolset-3/root/usr/lib/perl5:/opt/rh/devtoolset-3/root//usr/share/perl5/vendor_perl",
    "OLDPWD": "/home/nodeuser/project/node/src",
    "JAVACONFDIRS": "/opt/rh/devtoolset-3/root/etc/java:/etc/java",
    "SSH_TTY": "/dev/pts/0",
    "PCP_DIR": "/opt/rh/devtoolset-3/root",
    "GROUP": "normaluser",
    "USER": "nodeuser",
    "LD_LIBRARY_PATH": "/opt/rh/devtoolset-3/root/usr/lib64:/opt/rh/devtoolset-3/root/usr/lib",
    "HOSTTYPE": "x86_64-linux",
    "XDG_CONFIG_DIRS": "/opt/rh/devtoolset-3/root/etc/xdg:/etc/xdg",
    "MAIL": "/var/spool/mail/nodeuser",
    "PATH": "/home/nodeuser/project/node:/opt/rh/devtoolset-3/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin",
    "PWD": "/home/nodeuser/project/node",
    "LANG": "en_US.UTF-8",
    "PS1": "\\u@\\h : \\[\\e[31m\\]\\w\\[\\e[m\\] >  ",
    "SHLVL": "2",
    "HOME": "/home/nodeuser",
    "OSTYPE": "linux",
    "VENDOR": "unknown",
    "PYTHONPATH": "/opt/rh/devtoolset-3/root/usr/lib64/python2.7/site-packages:/opt/rh/devtoolset-3/root/usr/lib/python2.7/site-packages",
    "MACHTYPE": "x86_64",
    "LOGNAME": "nodeuser",
    "XDG_DATA_DIRS": "/opt/rh/devtoolset-3/root/usr/share:/usr/local/share:/usr/share",
    "LESSOPEN": "||/usr/bin/lesspipe.sh %s",
    "INFOPATH": "/opt/rh/devtoolset-3/root/usr/share/info",
    "XDG_RUNTIME_DIR": "/run/user/50141",
    "_": "./node"
  },
  "userLimits": {
    "core_file_size_blocks": {
      "soft": "",
      "hard": "unlimited"
    },
    "data_seg_size_bytes": {
      "soft": "unlimited",
      "hard": "unlimited"
    },
    "file_size_blocks": {
      "soft": "unlimited",
      "hard": "unlimited"
    },
    "max_locked_memory_bytes": {
      "soft": "unlimited",
      "hard": 65536
    },
    "max_memory_size_bytes": {
      "soft": "unlimited",
      "hard": "unlimited"
    },
    "open_files": {
      "soft": "unlimited",
      "hard": 4096
    },
    "stack_size_bytes": {
      "soft": "unlimited",
      "hard": "unlimited"
    },
    "cpu_time_seconds": {
      "soft": "unlimited",
      "hard": "unlimited"
    },
    "max_user_processes": {
      "soft": "unlimited",
      "hard": 4127290
    },
    "virtual_memory_bytes": {
      "soft": "unlimited",
      "hard": "unlimited"
    }
  },
  "sharedObjects": [
    "/lib64/libdl.so.2",
    "/lib64/librt.so.1",
    "/lib64/libstdc++.so.6",
    "/lib64/libm.so.6",
    "/lib64/libgcc_s.so.1",
    "/lib64/libpthread.so.0",
    "/lib64/libc.so.6",
    "/lib64/ld-linux-x86-64.so.2"
  ]
}

Utilisation

bash
node --report-uncaught-exception --report-on-signal \
--report-on-fatalerror app.js
  • --report-uncaught-exception Permet de générer un rapport en cas d'exceptions non gérées. Utile lors de l'inspection de la pile JavaScript en conjonction avec la pile native et d'autres données de l'environnement d'exécution.
  • --report-on-signal Permet de générer un rapport lors de la réception du signal spécifié (ou prédéfini) au processus Node.js en cours d'exécution. (Voir ci-dessous comment modifier le signal qui déclenche le rapport.) Le signal par défaut est SIGUSR2. Utile lorsqu'un rapport doit être déclenché par un autre programme. Les moniteurs d'application peuvent tirer parti de cette fonctionnalité pour collecter des rapports à intervalles réguliers et tracer un ensemble riche de données d'exécution internes dans leurs vues.

La génération de rapports basée sur les signaux n'est pas prise en charge sous Windows.

Dans des circonstances normales, il n'est pas nécessaire de modifier le signal de déclenchement du rapport. Cependant, si SIGUSR2 est déjà utilisé à d'autres fins, cet indicateur permet de changer le signal pour la génération du rapport et de préserver la signification originale de SIGUSR2 pour lesdites fins.

  • --report-on-fatalerror Permet de déclencher le rapport en cas d'erreurs fatales (erreurs internes au sein de l'exécution Node.js, telles qu'une mémoire insuffisante) qui entraînent l'arrêt de l'application. Utile pour inspecter divers éléments de données de diagnostic tels que le tas, la pile, l'état de la boucle d'événements, la consommation de ressources, etc. pour déterminer la cause de l'erreur fatale.
  • --report-compact Écrit les rapports dans un format compact, JSON sur une seule ligne, plus facilement consommable par les systèmes de traitement des logs que le format multiligne par défaut conçu pour la consommation humaine.
  • --report-directory Emplacement où le rapport sera généré.
  • --report-filename Nom du fichier dans lequel le rapport sera écrit.
  • --report-signal Définit ou réinitialise le signal pour la génération de rapport (non pris en charge sur Windows). Le signal par défaut est SIGUSR2.
  • --report-exclude-network Exclut header.networkInterfaces et désactive les requêtes DNS inverses dans libuv.*.(remote|local)Endpoint.host du rapport de diagnostic. Par défaut, cette option n'est pas définie et les interfaces réseau sont incluses.
  • --report-exclude-env Exclut les environmentVariables du rapport de diagnostic. Par défaut, cette option n'est pas définie et les variables d'environnement sont incluses.

Un rapport peut également être déclenché via un appel d'API depuis une application JavaScript :

js
process.report.writeReport()

Cette fonction prend un argument supplémentaire optionnel filename, qui est le nom d'un fichier dans lequel le rapport est écrit.

js
process.report.writeReport('./foo.json')

Cette fonction prend un argument supplémentaire optionnel err, qui est un objet Error qui sera utilisé comme contexte pour la pile JavaScript imprimée dans le rapport. Lors de l'utilisation du rapport pour gérer les erreurs dans un rappel ou un gestionnaire d'exceptions, cela permet au rapport d'inclure l'emplacement de l'erreur d'origine ainsi que l'endroit où elle a été traitée.

js
try {
  process.chdir('/non-existent-path')
} catch (err) {
  process.report.writeReport(err)
}
// Tout autre code

Si à la fois le nom de fichier et l'objet d'erreur sont passés à writeReport(), l'objet d'erreur doit être le deuxième paramètre.

js
try {
  process.chdir('/non-existent-path')
} catch (err) {
  process.report.writeReport(filename, err)
}
// Tout autre code

Le contenu du rapport de diagnostic peut être renvoyé sous forme d'objet JavaScript via un appel d'API depuis une application JavaScript :

js
const report = process.report.getReport()
console.log(typeof report === 'object') // true

// Semblable à la sortie de process.report.writeReport()
console.log(JSON.stringify(report, null, 2))

Cette fonction prend un argument supplémentaire optionnel err, qui est un objet Error qui sera utilisé comme contexte pour la pile JavaScript imprimée dans le rapport.

js
const report = process.report.getReport(new Error('custom error'))
console.log(typeof report === 'object') // true

Les versions API sont utiles lors de l'inspection de l'état d'exécution depuis l'application, en prévision d'un auto-ajustement de la consommation de ressources, de l'équilibrage de la charge, de la surveillance, etc.

Le contenu du rapport se compose d'une section d'en-tête contenant le type d'événement, la date, l'heure, le PID et la version de Node.js, de sections contenant les traces de pile JavaScript et native, d'une section contenant les informations du tas V8, d'une section contenant les informations de gestionnaire libuv et d'une section d'informations sur la plate-forme OS indiquant l'utilisation du CPU et de la mémoire et les limites du système. Un exemple de rapport peut être déclenché à l'aide de la REPL de Node.js :

bash
$ node
> process.report.writeReport();
Écriture du rapport Node.js dans le fichier : report.20181126.091102.8480.0.001.json
Rapport Node.js terminé
>

Lorsqu'un rapport est écrit, des messages de début et de fin sont envoyés à stderr et le nom de fichier du rapport est renvoyé à l'appelant. Le nom de fichier par défaut comprend la date, l'heure, le PID et un numéro de séquence. Le numéro de séquence aide à associer le vidage de rapport à l'état d'exécution s'il est généré plusieurs fois pour le même processus Node.js.

Version du rapport

Le rapport de diagnostic possède un numéro de version à un chiffre (report.header.reportVersion), représentant de manière unique le format du rapport. Le numéro de version est incrémenté lorsqu'une nouvelle clé est ajoutée ou supprimée, ou que le type de données d'une valeur est modifié. Les définitions de version du rapport sont cohérentes entre les versions LTS.

Historique des versions

Version 5

[Historique]

VersionModifications
v23.5.0Correction de fautes de frappe dans les unités de limite de mémoire.

Remplacer les clés data_seg_size_kbytes, max_memory_size_kbytes et virtual_memory_kbytes par data_seg_size_bytes, max_memory_size_bytes et virtual_memory_bytes respectivement dans la section userLimits, car ces valeurs sont données en octets.

json
{
  "userLimits": {
    // Ignorer certaines clés...
    "data_seg_size_bytes": {
      // remplace data_seg_size_kbytes
      "soft": "unlimited",
      "hard": "unlimited"
    },
    // ...
    "max_memory_size_bytes": {
      // remplace max_memory_size_kbytes
      "soft": "unlimited",
      "hard": "unlimited"
    },
    // ...
    "virtual_memory_bytes": {
      // remplace virtual_memory_kbytes
      "soft": "unlimited",
      "hard": "unlimited"
    }
  }
}

Version 4

[Historique]

VersionModifications
v23.3.0Ajout de l'option --report-exclude-env pour exclure les variables d'environnement de la génération de rapports.

De nouveaux champs ipv4 et ipv6 sont ajoutés aux points de terminaison des handles libuv tcp et udp. Exemples :

json
{
  "libuv": [
    {
      "type": "tcp",
      "is_active": true,
      "is_referenced": true,
      "address": "0x000055e70fcb85d8",
      "localEndpoint": {
        "host": "localhost",
        "ip4": "127.0.0.1", // nouvelle clé
        "port": 48986
      },
      "remoteEndpoint": {
        "host": "localhost",
        "ip4": "127.0.0.1", // nouvelle clé
        "port": 38573
      },
      "sendBufferSize": 2626560,
      "recvBufferSize": 131072,
      "fd": 24,
      "writeQueueSize": 0,
      "readable": true,
      "writable": true
    },
    {
      "type": "tcp",
      "is_active": true,
      "is_referenced": true,
      "address": "0x000055e70fcd68c8",
      "localEndpoint": {
        "host": "ip6-localhost",
        "ip6": "::1", // nouvelle clé
        "port": 52266
      },
      "remoteEndpoint": {
        "host": "ip6-localhost",
        "ip6": "::1", // nouvelle clé
        "port": 38573
      },
      "sendBufferSize": 2626560,
      "recvBufferSize": 131072,
      "fd": 25,
      "writeQueueSize": 0,
      "readable": false,
      "writable": false
    }
  ]
}

Version 3

[Historique]

VersionChangements
v19.1.0, v18.13.0Ajout d'informations supplémentaires sur la mémoire.

Les clés d'utilisation de la mémoire suivantes sont ajoutées à la section resourceUsage.

json
{
  "resourceUsage": {
    "rss": "35766272",
    "free_memory": "1598337024",
    "total_memory": "17179869184",
    "available_memory": "1598337024",
    "constrained_memory": "36624662528"
  }
}

Version 2

[Historique]

VersionChangements
v13.9.0, v12.16.2Les workers sont maintenant inclus dans le rapport.

Ajout de la prise en charge de Worker. Consultez la section Interaction avec les workers pour plus de détails.

Version 1

Il s'agit de la première version du rapport de diagnostic.

Configuration

La configuration d'exécution supplémentaire de la génération de rapports est disponible via les propriétés suivantes de process.report:

reportOnFatalError déclenche la génération de rapports de diagnostic en cas d'erreurs fatales lorsque la valeur est true. La valeur par défaut est false.

reportOnSignal déclenche la génération de rapports de diagnostic sur signal lorsque la valeur est true. Ceci n'est pas pris en charge sur Windows. La valeur par défaut est false.

reportOnUncaughtException déclenche la génération de rapports de diagnostic sur exception non interceptée lorsque la valeur est true. La valeur par défaut est false.

signal spécifie l'identifiant du signal POSIX qui sera utilisé pour intercepter les déclencheurs externes pour la génération de rapports. La valeur par défaut est 'SIGUSR2'.

filename spécifie le nom du fichier de sortie dans le système de fichiers. Une signification particulière est attachée à stdout et stderr. Leur utilisation entraînera l'écriture du rapport dans les flux standard associés. Dans les cas où les flux standard sont utilisés, la valeur dans directory est ignorée. Les URL ne sont pas prises en charge. La valeur par défaut est un nom de fichier composite qui contient l'horodatage, le PID et le numéro de séquence.

directory spécifie le répertoire du système de fichiers où le rapport sera écrit. Les URL ne sont pas prises en charge. La valeur par défaut est le répertoire de travail actuel du processus Node.js.

excludeNetwork exclut header.networkInterfaces du rapport de diagnostic.

js
// Déclencher un rapport uniquement sur les exceptions non interceptées.
process.report.reportOnFatalError = false
process.report.reportOnSignal = false
process.report.reportOnUncaughtException = true

// Déclencher un rapport pour les erreurs internes ainsi que pour les signaux externes.
process.report.reportOnFatalError = true
process.report.reportOnSignal = true
process.report.reportOnUncaughtException = false

// Modifier le signal par défaut en 'SIGQUIT' et l'activer.
process.report.reportOnFatalError = false
process.report.reportOnUncaughtException = false
process.report.reportOnSignal = true
process.report.signal = 'SIGQUIT'

// Désactiver le rapport des interfaces réseau
process.report.excludeNetwork = true

La configuration lors de l'initialisation du module est également disponible via les variables d'environnement :

bash
NODE_OPTIONS="--report-uncaught-exception \
  --report-on-fatalerror --report-on-signal \
  --report-signal=SIGUSR2  --report-filename=./report.json \
  --report-directory=/home/nodeuser"

La documentation API spécifique peut être trouvée dans la section documentation de l'API process.

Interaction avec les workers

[Historique]

VersionModifications
v13.9.0, v12.16.2Les workers sont maintenant inclus dans le rapport.

Les threads Worker peuvent créer des rapports de la même manière que le thread principal.

Les rapports incluront des informations sur tous les Workers qui sont des enfants du thread actuel dans la section workers, chaque Worker générant un rapport au format standard.

Le thread qui génère le rapport attendra la fin des rapports des threads Worker. Cependant, la latence sera généralement faible, car l'exécution de JavaScript et la boucle d'événements sont interrompues pour générer le rapport.