【问题标题】:How can I get Sails.js logging to use multiple Winston transports with different log levels?如何让 Sails.js 日志记录以使用具有不同日志级别的多个 Winston 传输?
【发布时间】:2015-03-21 18:50:25
【问题描述】:

在搜索 Sails.js 文档、GitHub 问题、Google 组和这里的 SO 之后,我仍然无法弄清楚我做错了什么......

我想使用 Winston 以 3 个不同的传输方式记录 3 个不同的日志级别:

在我的 config/log.js 文件中,我有以下内容:

var Winston = require('winston');
var Loggly = require('winston-loggly');
var Sentry = require('winston-sentry');

module.exports.log = {

  // Without this the log level is prefixed to messages twice 
  // for some reason...
  prefixes: {}, 

  // Without this, Winston Sails seems to only send "info" 
  // logs to Winston (Sails' default log level)...
  level: 'verbose', 

  custom: new Winston.Logger({
    transports: [

      new Winston.transports.Sentry({
        level: 'warn',
        dsn: '{my account dsn}',
        patchGlobal: true
      }),

      new Winston.transports.Loggly({
        level: 'info',
        subdomain: '{my subdomain}',
        inoputToken: '{my input token}'
      }),

      new Winston.transports.Console({
        level: 'verbose'
      })

    ]
  })
};

但是上面的设置有很多问题:

  • verbose 日志正在发送到 Loggly...
  • 只有root 错误出现在Sentry 中,我认为这是来自patchGlobal 选项。没有警告,也没有来自被拒绝的 Bluebird 承诺的“可能未捕获的异常”错误。

谁能指出我正确的方向?我做错了什么?

【问题讨论】:

  • 请注意:var Loggly = require('winston-longly'): 有两个错字。我想应该是winston-loggly 并以; 结束,对吧?
  • 不错的@Murilo,已修复。

标签: logging sails.js winston


【解决方案1】:

嗯,看起来 Winston 是根据数字级别写入日志的。这样错误消息将始终写入信息日志,但信息永远不会写入错误日志。

所以我认为最好在 config/bootstrap.js 中分离到不同的实例:

sails.warnLog = new (winston.Logger)({
      transports: [
        new (winston.transports.Sentry)({
          name: 'warn-Sentry',
          dsn: '{my account dsn}',
          patchGlobal: true
          level: 'warn'
        })
      ]});

sails.infLog = new (winston.Logger)({
      transports: [
        new (winston.transports.Loggly)({
          name: 'info-Loggly',
          subdomain: '{my subdomain}',
          inputToken: '{my input token}'
          level: 'info'
        })
      ]});

sails.verbLog = new (winston.Logger)({
      transports: [
        new (winston.transports.Console)({
          name: 'verb-console',
          timestamp: true,
          prettyPrint: true,
          colorize: true,
          level: 'verbose'
        })
      ]});

然后你就可以写日志了:

sails.warnLog.warn('Warning');
sails.infLog.info('Information');
sails.verbLog.verbose('Verbose');

其实我不喜欢这种方式。好丑=(

【讨论】:

    猜你喜欢
    • 2014-01-22
    • 2011-12-16
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 2013-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多