2017-04-17 34 views
3

我有10个文件,其中我为每个文件写了2个行,如何把winston的独特文件名?

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 

我希望我的所有控制器(node.js的)的只有一个人file.Can日志帮助me.Thanks。

回答

2

只是将您传递给新winston.transports.File的对象的filename属性更改为唯一。例如,如果您将这两行的第一行添加到10个单独的文件中,则可以执行类似这样的操作,这会将_${__filename}添加到由winston创建的日志文件的名称中。 __filenameNode Module Wrapper在运行时为每个单个模块提供。

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

如果你想在一个文件中的一切,你可以创建一个代表记录器的新模块。

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

module.exports = logger 

然后,你可以要求你的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') 
+0

它的工作,感谢peteb内。 – MMR