# Logger for NodeJS This utility library implements our standard Bunyan + Sentry configuration - [Requirements](#requirements) - [Installation](#installation) - [Configuration](#configuration) - [Use](#use) - [Sensitive Data](#sensitive-data) ## Requirements Minimum Node.js version: 4 ## Installation ```bash npm install --save chpr-logger ``` ## Configuration | Key | Required | Description | |--------------------------|----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | `LOGGER_NAME` | yes | Sets the name of the logger. | | `LOGGER_LEVEL` | yes | Set the minimum level of logs. | | `SENTRY_DSN` | no | Sets the Sentry stream. ([bunyan-sentry-stream](https://www.npmjs.com/package/bunyan-sentry-stream)) | | `USE_BUNYAN_PRETTY_STREAM` | no | Outputs the logs on stdout with the pretty formatting from Bunyan. Must be set to `true` to be active. ([bunyan-prettystream](https://www.npmjs.com/package/bunyan-prettystream)) | | `LOGGER_USE_SENSITIVE_DATA_STREAM` | no | Use the sensitive data stream to remove any possible sensitive data from the logs (enabled by default, `false` to use the `process.stdout` stream). | | `LOGGER_SENSITIVE_DATA_PATTERN` | no | Pattern fragments to match sensitive keys (default is `(mdp|password|authorization|token|pwd|auth)`). | ## Use ```javascript 'use strict'; const logger = require('chpr-logger'); /* The signature is logger[level](context, message) where: - context is an object containing all info to be logged - context may be passed an `err` property that is an error and will be used by sentry to regroup errors and capture proper stacktraces - message is just a string explaining what the log is As in bunyan, context is optional and logger[level](message) can also work. */ // Log a fatal error message: logger.fatal({ err: new Error('Fatal'), field: 'additional info' }, 'fatal message'); // Log an error message: logger.error({ err: new Error('Error'), anotherField: 'extra context' }, 'error message'); // Log a warning message: logger.warn({ err: new Error('Warn'), userId:'1e7b8d', age: 17 }, 'User is under 18'); // Log an informational message: logger.info({ field: 1 }, 'info message'); // Log a debug message: logger.debug({ user }, 'debug message'); // Log a trace message: logger.trace({ fields: [1, 2, 66]] }, 'trace message'); ``` ## Sensitive Data `chpr-logger` can filter sensitive data based on specific keys and replace the values by `__SENSITIVE_DATA__` string. This feature is enabled by default but you can skip this (not recommanded) by setting the environment variable `LOGGER_USE_SENSITIVE_DATA_STREAM` to `false`. In addition, you can update the pattern on which to make the match with the environment variable `LOGGER_SENSITIVE_DATA_PATTERN`. Its value must represent a valid [capturing regular expression](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/RegExp#group_back).