我找到了更好的方法。
我在winston 记录器上添加了一个附加层,在本例中是一个函数,它为需要记录器的每个模块保留模块名称。因此,当一个模块requires 我的新记录器时,它实际上使用模块名称调用导出的函数,在本例中为__filename。
log.js
var winston = require('winston')
var winstonLogger = new (winston.Logger)({
transports: [
new (winston.transports.File) ({
filename: 'MyLogs.txt',
handleExceptions: true,
humanReadableUnhandledException: true,
level: 'info',
timestamp: true,
json: false
}),
new (winston.transports.Console) ({
level: 'info',
prettyPrint: true,
colorize: true,
timestamp: true
})
]
})
module.exports = function(fileName) {
var myLogger = {
error: function(text) {
winstonLogger.error(fileName + ': ' + text)
},
info: function(text) {
winstonLogger.info(fileName + ': ' + text)
}
}
return myLogger
}
module1.js
var log = require('log')(__filename)
log.info('Info log example')
信息:C:\Users\user1\project\module1.js:信息日志示例
module2.js
var log = require('log')(__filename)
log.error('Error log example')
错误:C:\Users\user1\project\module2.js:错误日志示例
另外,这样一来,我提交文本日志的方式就无需更改任何地方; log.info('text') 和以前一样。