我使用winston日志记录,因为我使用其功能,如不同的日志记录级别,多个传输等。
但我也喜欢debug's命名空间功能。此外,快递已经使用过它。那么可以将它们一起使用,例如让winston日志记录有命名空间吗?
答案 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)
在处理 debug
和 winston
时,您可能还想覆盖 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('*');