日志
在 dev 上输出 json 的简单控制台记录器
使用量
npm install --save @5app/logger
const logger = require('@5app/logger');
logger.info('An email was sent', {
email: '[email protected]',
template: 'template1',
});
logger.error(new Error('Unknown playlist 123'));
选项
日志可以选择使用下列环境变量进行自定义:
LOGS_FORMAT: 如果设置为json,日志器会以json格式记录消息,而不是漂亮的消息(默认行为).LOGS_LEVEL: 最小日志级别, 默认为debug。接受值为'debug', (中文(简体) ),'info', (中文(简体) ),'warn',以及'error'TAG: 释放要添加到日志信件中的标记( 如 docker 图像标记)
日志水平
日志级别是(从低到高优先级): 'debug', (中文(简体) ), 'info', (中文(简体) ), 'warn',以及 'error'。 。 。 .
伐木机提供伐木功能的签名如下: logger.<level>(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'});
黑警报
logger.slackAlert([level], message, ...) 日志, 如上面的正则函数, 但预开 slackAlert 并添加随机 slackAlertId (通过) crypto.randomUUID()用于记录的上下文,即使没有提供上下文,也生成上下文. level 是可选的,默认为 'error'当它必须是 'debug', (中文(简体) ), 'info', (中文(简体) ), 'warn',或 'error'。任何剩余的论据将逐一转交 logger.<level>,因此它们遵循该级别本身的签名(例如:. context 财务报告和审定财务报表 errorObject 页:1 'error'刚刚 context (对他人而言).
这是用来连接一个日志传输管道(例如,一个记录处理器,用于监视 slackAlert 前缀)将信件发送到Slack,使用 slackAlertId 将Slack站点与原日志线连接起来,同时仍按规定的严重程度进行记录.
logger.slackAlert('Payment provider is down', error); // level defaults to "error"
logger.slackAlert('warn', 'Queue depth is high', {depth: 1200}); // context is merged with {slackAlertId: '...'}
logger.slackAlert('warn', 'Queue depth is high'); // context defaults to {slackAlertId: '...'}
logger.slackAlert('error', 'Payment provider is down', {provider: 'stripe'}, error);
logger.slackAlert('error', 'Payment provider is down', error); // the (message, errorObject) shorthand also works; slackAlertId is added alongside the error details
注:因为 level 通过检查第一个参数是否是一个已知的关卡字符串,通过一个无法识别的关卡(例如,一个像 'eror'这不是一个错误——它被默默地读作 message 改为: level 默认为 'error'。 。 。 .
动态获取上下文
除了提供上下文对象外,您还可以使用 logger.addContext 以提供一个函数,该函数将调用每个日志获取上下文对象.
如果您在使用, 这会有所帮助 自动启动( h) 或者说 cls-按键 来存储类似线程本地存储的元数据.
例如,你可以做以下工作,而无需明确通过 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}