【问题标题】:winstonjs Get logger created with winston.createLogger(...)winstonjs 获取使用 winston.createLogger(...) 创建的记录器
【发布时间】:2018-01-01 22:59:58
【问题描述】:

问题
Winston 提供winston.loggers.get("logger name") 以获得记录器。如何获取使用 winston.createLogger(options) 创建的记录器(它没有名称)

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

我想在整个应用程序中使用这个记录器,但每次我require("") 它时,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;

【问题讨论】:

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

标签: javascript node.js logging winston


【解决方案1】:

后人的正式答案:

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

【讨论】:

    【解决方案2】:

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

    但是,您可以这样做。
    使用winston.loggers.add(name, options)创建记录器
    使用winston.loggers.get(name)获取记录器

    此外,Node JS require() 缓存模块。谁知道!

    感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 2018-04-07
      • 2019-01-25
      • 2021-02-24
      • 1970-01-01
      • 2019-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-18
      相关资源
      最近更新 更多