是否可以一起使用winston日志记录和调试模块?

时间:2017-10-30 10:17:19

标签: node.js express logging winston

我使用winston日志记录,因为我使用其功能,如不同的日志记录级别,多个传输等。

但我也喜欢debug's命名空间功能。此外,快递已经使用过它。那么可以将它们一起使用,例如让winston日志记录有命名空间吗?

3 个答案:

答案 0 :(得分:1)

在使用几种不同的记录器后,我对nodejs记录器有了更多的了解,现在我相信它们不应该一起使用b / c它们是为不同目的而设计的。另一方面,摩根和温斯顿可以一起使用,例如Node.js - logging / Use morgan and winston,morgan和debug也可以一起使用,Nodejs - How to use morgan with debug

但首先,引用Logging in Node.js done right

  

在Node.js应用程序中设置正确的日志记录可以是位   最初由于可用的过多模块而势不可挡   NPM。

当我和摩根,温斯顿一起调试时,这确实是我的情况。但后来我意识到它们是出于重叠的不同目的。所以我在调试问题时使用debugjs而不是使用console.log(有些人说debugjs不是记录器)。在我完成它之后,我关闭了调试。

Morgan将专门记录快速HTTP请求。最好在dev / prod env中用于不同的目的。

在dev / prod env中为Winston使用不同的日志级别可能是一种常见的做法。我也可以使用express-winston来记录HTTP请求而不是使用morgan。

Winston使用不同的日志级别来关闭某些日志,不像debugjs使用命名空间来关闭日志,所以我认为它们不能一起工作。

答案 1 :(得分:0)

开始将调试(...)调用传递到winston可能很有用。您可以覆盖debug.log函数以实现此目的。

const logger  = require('./v1/lib/logger'); //my winston logger
const util    = require('util');
const debug     = require('debug');

//for testing and dev use the regular debug (optional) 
if (process.env.NODE_ENV === 'production') {
  debug.log = (...args) => logger.info(util.format(...args))
}

module.exports =  debug;

答案 2 :(得分:0)

在处理 debugwinston 时,您可能还想覆盖 formatArgs 函数,因为 debug.log 正在接收已经着色的参数(取决于环境)并且它可能在某些情况下会产生意想不到的结果(例如设置 env 与模块加载顺序)。

import debug from "debug";
import util from "util";
import winston from "winston";

// create winston logger
const logger = new winston.Logger({ /*...*/ });

// keep original arguments
debug.formatArgs = (args) => { /* do nothing */ };
// override logging (keep function to use `this`)
debug.log = function(...args) {
  // log to winston
  logger.log("info", {
    // `this` is bound to debug instance
    namespace: this.namespace,
    // format as in `console.log`
    message: util.format(...args),
    // add message time
    timestamp: new Date().toISOString(),
    // optionally log also diff time
    diff: '+' + debug.humanize(this.diff),
  });
};
// enable all debug
debug.enable('*');