记录器不保存所需的所有日志信息 - 节点js异步

时间:2016-09-23 12:43:25

标签: node.js asynchronous logging winston

我有一个很棒的winston记录器:

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)
    } 
  })

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

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

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

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

1 个答案:

答案 0 :(得分: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*/
        })
    ]
});