@5app/logger 中文文档教程

发布于 3年前 浏览 24 项目主页 更新于 3年前

logger

在 prod 中输出 json 并在 dev 中输出漂亮消息的简单控制台记录

Usage

npm install --save @5app/logger
const logger = require('@5app/logger');

logger.info('An email was sent', {
  email: 'customer@5app.com',
  template: 'template1',
});

logger.error(new Error('Unknown playlist 123'));

Options

器 可以选择使用以下环境变量自定义记录器:

  • LOGS_FORMAT: if set to json, the logger will log messages in json format instead of pretty messages (default behaviour).
  • LOGS_LEVEL: minimum logging level, by default it will be debug. Accepted values are 'debug', 'info', 'warn', and 'error'
  • TAG: release tag (e.g. docker image tag) to be added to the log messages

Logging levels

日志记录级别(从低到高优先级):'debug', “信息”“警告”“错误”。 记录器提供具有以下签名的记录函数:logger.(message, objectOrError)

下面是如何使用记录器的示例:

logger.error('An error happened', new ApiError('The api call failed', 404)); // will log the message, the error message, the stack trace, and the statusCode error property
logger.warn('Be warned', {a: 1, b: Date.now(), c: 'some string'});
logger.info('An event happened', {a: 1, b: Date.now(), c: 'some string'});
logger.debug('A minor operation', {a: 1, b: Date.now(), c: 'some string'});

Fetching context dynamically

除了提供上下文对象外,您也可以使用 logger.addContext 提供一个函数,该函数将在每个日志上调用以获取上下文对象。

如果您使用 async_hookscls-hooked 以类似于线程本地存储的方式存储请求元数据。

例如,您可以执行以下操作,而不必将 correlationId 显式传递给每个日志:

const asyncLocalStorage = new AsyncLocalStorage();

expressApp.use((req, res, next) {
  const correlationId = req.get('X-Correlation-Id') || uuidV4();
  asyncLocalStorage.run({correlationId}, () => next());
});

logger.addContext(() => asyncLocalStorage.getStore());
logger.info('User profile updated', {userId: 1234});

输出将如下所示:

{"level":"info","timestamp":"2021-02-23T17:55:43.011Z","correlationId":"12bf5b37-e0b8-56e0-8dcf-dc8c4aefc123","userId":1234}

logger

Simple console logger that outputs json in prod and pretty messages on dev

Usage

npm install --save @5app/logger
const logger = require('@5app/logger');

logger.info('An email was sent', {
  email: 'customer@5app.com',
  template: 'template1',
});

logger.error(new Error('Unknown playlist 123'));

Options

The logger can optionally be customised using the following environment variables:

  • LOGS_FORMAT: if set to json, the logger will log messages in json format instead of pretty messages (default behaviour).
  • LOGS_LEVEL: minimum logging level, by default it will be debug. Accepted values are 'debug', 'info', 'warn', and 'error'
  • TAG: release tag (e.g. docker image tag) to be added to the log messages

Logging levels

Logging levels are (from lower to higher priority): 'debug', 'info', 'warn', and 'error'. The logger provides the logging functions with the following signatures: logger.<level>(message, objectOrError)

Here is an example of how the logger can be used:

logger.error('An error happened', new ApiError('The api call failed', 404)); // will log the message, the error message, the stack trace, and the statusCode error property
logger.warn('Be warned', {a: 1, b: Date.now(), c: 'some string'});
logger.info('An event happened', {a: 1, b: Date.now(), c: 'some string'});
logger.debug('A minor operation', {a: 1, b: Date.now(), c: 'some string'});

Fetching context dynamically

In addition to providing a context object, you can also use logger.addContext to provide a function which will be called on every log to get a context object.

This can be helpful if you are using async_hooks or cls-hooked to store request metadata similarly to thread-local storage.

For instance, you can do the following without having to explicitly pass the correlationId to each log:

const asyncLocalStorage = new AsyncLocalStorage();

expressApp.use((req, res, next) {
  const correlationId = req.get('X-Correlation-Id') || uuidV4();
  asyncLocalStorage.run({correlationId}, () => next());
});

logger.addContext(() => asyncLocalStorage.getStore());
logger.info('User profile updated', {userId: 1234});

And the output will look like:

{"level":"info","timestamp":"2021-02-23T17:55:43.011Z","correlationId":"12bf5b37-e0b8-56e0-8dcf-dc8c4aefc123","userId":1234}
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文