Javascript winstonjs获取使用winston.createLogger(…)创建的记录器

Javascript winstonjs获取使用winston.createLogger(…)创建的记录器,javascript,node.js,logging,winston,Javascript,Node.js,Logging,Winston,问题 Winston提供Winston.loggers.get(“记录器名称”)以获取记录器。如何使用winston.createLogger(选项)创建记录器(它没有名称) 我为什么这么问 我已经使用winston.createLogger(选项)在文件中创建了一个记录器,然后使用module.exports导出创建的记录器 我希望在整个应用程序中使用此记录器,但每次我需要(“”它时,createLogger(options)都会被调用,因此每次都会创建一个新的记录器 代码示例 const w

问题
Winston提供
Winston.loggers.get(“记录器名称”)
以获取记录器。如何使用
winston.createLogger(选项)
创建记录器(它没有名称)

我为什么这么问
我已经使用
winston.createLogger(选项)
在文件中创建了一个记录器,然后使用
module.exports
导出创建的记录器

我希望在整个应用程序中使用此记录器,但每次我
需要(“”
它时,
createLogger(options)
都会被调用,因此每次都会创建一个新的记录器

代码示例

const winston = require('winston');

// this logger does not have a name!
// Thus, how do I get it.
const logger = winston.createLogger({});


module.exports = logger;

给后代的正式答复:


单个node.js进程中的多个require()调用不会创建模块的新实例。第一个将返回,随后的调用将返回对第一个的引用。这是精心设计的,非常方便。

给后代的正式答案:


单个node.js进程中的多个require()调用不会创建模块的新实例。第一个将返回,随后的调用将返回对第一个的引用。这是精心设计的,而且非常方便。

对于那些仍然希望在使用
createLogger()
创建winston logger时能够按名称获取该记录器的人,我还没有找到答案

但是,你可以这样做。
使用winston.loggers.add(名称、选项)创建记录器

使用winston.loggers.Get(name)

此外,节点JS
require()
缓存模块。谁知道呢


感谢您的帮助。

对于那些仍然希望在使用
createLogger()
创建winston logger时按名称获取winston logger的人,我还没有找到答案

但是,你可以这样做。
使用winston.loggers.add(名称、选项)创建记录器

使用winston.loggers.Get(name)

此外,节点JS
require()
缓存模块。谁知道呢


谢谢你的帮助。

是的,如果你想通过require处理多个文件,这是唯一的方法,它就像一个流一样简单。(我假设您不使用cluster mod或fork,因为在某些情况下您可以传递参数,假设另一个文件作为子进程执行)您如何使用logger模块?我看不出你所做的会导致创建多个记录器的任何问题。节点缓存来自第一个require()的module.exports并将其返回给后续调用。我担心的是,多个文件将包含require('logger.js'),从而导致多次创建记录器。我不知道node cached require(),所以我想我的担心是无效的。谢谢Jim Baldwin是的,如果你想通过require处理多个文件,这是唯一的方法,它就像流一样简单。(我假设您不使用cluster mod或fork,因为在某些情况下您可以传递参数,假设另一个文件作为子进程执行)您如何使用logger模块?我看不出你所做的会导致创建多个记录器的任何问题。节点缓存来自第一个require()的module.exports并将其返回给后续调用。我担心的是,多个文件将包含require('logger.js'),从而导致多次创建记录器。我不知道node cached require(),所以我想我的担心是无效的。谢谢你,吉姆·鲍德温