使用成熟的logger提高错误可见性

一段解释

我们都特别喜欢(loovve)console.log,但显而易见地,对于严肃的项目, 有信誉和持久的Logger是必需的,比如Winston (非常流行) or Pino(专注于性能的新库)。一套实践和工具将有助于更快速地解释错误 – (1)使用不同的级别(debug, info, error)频繁地log;(2)在记录日志时, 以 JSON 对象的方式提供上下文信息, 请参见下面的示例;(3)使用日志查询API(在大多数logger中内置)或日志查看程序软件监视和筛选日志;(4)使用操作智能工具(如 Splunk)为操作团队公开和管理日志语句。

代码示例 – 使用Winston Logger

  1. //您的集中式logger对象
  2. var logger = new winston.Logger({
  3. level: 'info',
  4. transports: [
  5. new (winston.transports.Console)(),
  6. new (winston.transports.File)({ filename: 'somefile.log' })
  7. ]
  8. });
  9. //在某个地方使用logger的自定义代码
  10. logger.log('info', 'Test Log Message with some parameter %s', 'some parameter', { anything: 'This is metadata' });

代码示例 – 查询日志文件夹 (搜索条目)

  1. var options = {
  2. from: new Date - 24 * 60 * 60 * 1000,
  3. until: new Date,
  4. limit: 10,
  5. start: 0,
  6. order: 'desc',
  7. fields: ['message']
  8. };
  9. // 查找在今天和昨天之间记录的项目
  10. winston.query(options, function (err, results) {
  11. //对于结果的回调处理
  12. });

博客引用: “Logger要求”

摘自博客 Strong Loop

让我们确定一些要求 (对于logger):

  1. 为每条日志添加时间戳。这条很好自我解释-你应该能够告知每个日志条目发生在什么时候。
  2. 日志格式应易于被人类和机器理解。
  3. 允许多个可配置的目标流。例如, 您可能正在将trace log写入到一个文件中, 但遇到错误时, 请写入同一文件, 然后写入到错误日志文件,并同时发送电子邮件…