2015-08-18 3 views
1

В настоящее время я запускаю приложение для кластера, и запись, похоже, не выводится. Я использую внешнюю ссылку для winston, чтобы я мог применять аналогичный журнал для любых узлов, которые я создаю, но даже основной консольный транспорт не работает. Если я заменю вызовы winston на системные «console.log» вызовы, выход работает просто отлично. Не знаю, где я неправильно с этим:Winston logging не работает при использовании кластера

logger.js

var winston = require('winston'), 
    logger, 
    customLevels = {workr: 0, info: 1, debug: 2, error: 3}; 
winston.emitErrs = true; 
logger = new winston.Logger({levels: customLevels, exitOnError: false}); 
logger.enableConsole = function() { 
    logger.add (winston.transports.Console, { 
     name: 'console', 
     formatter: function (options) { 
      return options.level.toUpperCase() + ' - ' + options.message; 
     } 
    }); 
}; 
//I am omitting a file transport here 
module.exports = logger; 
module.exports.stream = { 
    write: function(message, encoding){ 
     logger.info(message); 
    } 
}; 

cluster.js

var cluster = require('cluster'), 
    logger = require('./logger'), 
    maxJobs = Math.floor(require('os').cpus().length/2), 
    activeJobs = 0; 

if (cluster.isMaster) { 
    logger.enableConsole(); 
    cluster.setupMaster({silent: true}); 

    logger.log('workr', 'MaxJobs: ' + maxJobs); 
    setInterval(function() { 
     logger.log('workr', "Active: " + activeJobs); 
    }, 200); 

    for (var i = 0; i < maxJobs; i++) { 
     cluster.fork(); 
    } 

    Object.keys(cluster.workers).forEach(function (id) { 
     cluster.workers[id].process.stdout.on('data', function (chunk) { 
      logger.log('workr', chunk); 
     }); 
     cluster.workers[id].process.stderr.on('data', function (chunk) { 
      logger.log('error', 'Error in worker ' + id + ': ' + chunk); 
     }); 
     cluster.workers[id].on('message', function (msg) { 
      if (msg.update !== undefined) { 
       activeJobs += msg.update ? 1 : -1; 
      } 
     }); 
    }) 

    cluster.on('exit', function (worker, code, signal) { 
     logger.log('workr', 'worker ' + worker.process.pid + ' died'); 
    }); 
} else { 
    setTimeout(function() { 
     console.log('Adding 1'); 
     process.send({ update: true }); 
     setTimeout(function() { 
      console.log('Removing 1'); 
      process.send({ update: false });    
     }, Math.random() * 500 + 1000); 
    }, Math.random() * 600 + 200); 
} 

ответ

0

Это оказалось, что проблема с моей реализацией Winston. Я не указывал уровень ведения журнала в Winston, что означало, что он по умолчанию «info», и это был более высокий уровень, чем мой уровень «workr». Добавляя конкретный уровень, похоже, он работает сейчас.

... 
logger.enableConsole = function() { 
    logger.add (winston.transports.Console, { 
     name: 'console', 
     formatter: function (options) { 
      return options.level.toUpperCase() + ' - ' + options.message; 
     }, 
     level: 'workr' // This was what I was missing 
    }); 
}; 

 Смежные вопросы

  • Нет связанных вопросов^_^