2016-09-23 37 views
2

我有一个温斯顿记录伟大的工程:记录仪不保存所需的所有日志信息 - 节点JS异步

var systemLogger = new (winston.Logger)({ 
    transports: [ 
    new (winston.transports.Console)({ 
     timestamp: function() { 
     return moment().format('D/MM/YYYY HH:mm:ss:SSS') 
     }, 
     colorize: true 
    }), 
    new (require('winston-daily-rotate-file'))({ 
     filename: 'logs/-system.log', 
     datePattern: 'dd-MM-yyyy', 
     prepend: true, 
     json: false, 
     timestamp: function() { 
     return moment().format('D/MM/YYYY HH:mm:ss:SSS') 
     }, 
     formatter: formatter 
    }) 
    ] 
}) 

我把这个记录在我的计划:

var systemLogger = require('./logging.js') 

var asyncTasks = [] 

asyncTasks.push(function(callback) { 
systemLogger.info('Saved the Updates', { 
    'URL': url 
}) 
callback() 
}) 

asyncTasks.push(function(callback) { 
systemLogger.info('Status Updates', { 
    'Status': status 
}) 
callback() 
}) 

    async.parallel(asyncTasks, function(error, data) { 
    if (!done) { 
     process.exit(!error) 
    } 
    }) 

我已经简化我的代码尽可能多,但想法是我在整个程序中生成了不同的日志消息,我将它们添加到数组中并将它们并行运行。

现在....这引起了一个问题。所有日志消息都被打印到控制台,但只有一个被保存到我的实际日志文件中。这是为什么?

我试着将日志消息注释掉并重新运行程序,但仍然只有一条消息被保存在上面的例子中。任何帮助将不胜感激!

假设 - 这可能是因为我在同一时间将信息保存到同一个日志文件 - 但这只是两个小行,所以我假设它被打印在控制台它应该也保存正确?

+0

什么''中logging.js' formatter'?在你的例子中它是未定义的。 – DrakaSAN

+0

另外,请测试您的示例代码,以便我们可以立即使用它来尝试查明问题,而不是花时间修复mising依赖项,缺少变量... – DrakaSAN

+0

formatter指的是我使用的自定义格式化程序。尽管如此,这并不影响结果。我错过了它们以简化代码 – deeveeABC

回答

0

我已经尽我所能完成了你的代码,并得到了这个。代码工作正常,并在控制台和文件中均无错误地记录。

如果可能很重要,则运行节点v.4.4.5。

如果有文件写入失败,它不在代码的这一部分。

test.js

'use strict'; 

//Dependencies 
const async = require('async'), 
    systemLogger = require('./logging.js'); 

//Test variables 
const url = 'redblueyellow', 
    status = 'goldsilvercrystal'; 

let asyncTasks = []; 

asyncTasks.push(function(callback) { 
    systemLogger.info('Saved the Updates', { 
     'URL': url 
    }); 
    callback(); 
}); 

asyncTasks.push(function(callback) { 
    systemLogger.info('Status Updates', { 
     'Status': status 
    }); 
    callback(); 
}) 

async.parallel(asyncTasks, function(error, data) { 
    console.log('error: ' + error); 
    console.log('data: ' + data); 
}); 

logging.js

'use strict'; 

//Dependencies 
const winston = require('winston'), 
    moment = require('moment'); 

//Export 
let systemLogger = module.exports = new (winston.Logger)({ 
    transports: [ 
     new (winston.transports.Console)({ 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS') 
      }, 
      colorize: true 
     }), 
     new (require('winston-daily-rotate-file'))({ 
      filename: 'logs/-system.log', 
      datePattern: 'dd-MM-yyyy', 
      prepend: true, 
      json: false, 
      timestamp: function() { 
       return moment().format('D/MM/YYYY HH:mm:ss:SSS') 
      }/*, 
      formatter: formatter*/ 
     }) 
    ] 
});