2016-09-23 54 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*/ 
     }) 
    ] 
});