node.js - 如何为 winston 设置唯一的文件名?

标签 node.js logging mean-stack winston

我有 10 个文件,我通过在每个文件中放置这 2 行来为每个文件编写日志。

winston = require('winston');
winston.add(winston.transports.File, { filename: 'project.log' });

然后我得到了错误

throw new Error('Transport already attached: ' + instance.name + ", assign a different name");
^

Error: Transport already attached: file, assign a different name

我想要我所有 Controller (node.js)的日志只在一个文件中。任何人都可以帮助我。谢谢。

最佳答案

只需更改所传递对象的 filename 属性,使新的 winston.transports.File 是唯一的。

例如,如果您将前两行添加到 10 个单独的文件中,您可以执行类似这样的操作,这会将 _${__filename} 添加到由创建的日志文件的名称中 winston 。 __filenameNode Module Wrapper 提供到运行时的每个模块。

const winston = require('winston')
winston.add(winston.transports.File, {filename: `project_${__filename}.log`})

如果您想要将所有内容都放在一个文件中,您只需创建一个代表 Logger 的新模块即可。

// logger.js
const winston = require('winston')
const logger = new winston.Logger({
  transports: [ new winston.transports.File({filename: 'project.log'}) ]
})

module.exports = logger

然后你可以在你的 Controller 中引入 logger.js

// controller.js
const logger = require('./logger')

// logs "[controller.js] test-log-entry" to project.log as an info entry
logger.info(`[${__filename}] test-log-entry') 

关于node.js - 如何为 winston 设置唯一的文件名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43454991/

相关文章:

node.js - 我可以使用 Firebase Cloud Functions 隐藏 JavaScript 代码吗?

javascript - 如何在 Gatsby 中将环境变量传递给 Sass 插件?

javascript - Node.js 将变量传递给模块 vs 将变量传递给每个模块函数

c# - Trace.Write(string, string) 和 Trace.WriteLine(string, string) 不按类别过滤

java - 写入同一个 log4j 日志文件的不同应用程序

javascript - 如何在 AngularJS 中查找二维数组中的访问元素

node.js - 我可以使用 Node 构建支付网关软件吗?

python - logger.setLevel(logging.INFO) 不会使 logger.info() 可见

javascript - 如何在 MongoDB 中修改动态添加的文档字段

angularjs - Mongoose 从两个相关集合中获取记录并填充