gpt4 book ai didi

node.js - 使用集群时 Winston 日志记录不起作用

转载 作者:太空宇宙 更新时间:2023-11-04 02:23:03 24 4
gpt4 key购买 nike

我当前正在启动集群应用程序,但日志记录似乎没有输出。我正在使用 winston 的外部引用,以便我可以在我创建的任何 Node 中应用类似的日志,但即使是基本的控制台传输也无法正常工作。如果我用系统“console.log”调用替换winston 调用,输出就可以正常工作。不知道我哪里出了问题:

记录器.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);
}
};

集群.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);
}

最佳答案

事实证明这是我的 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
});
};

关于node.js - 使用集群时 Winston 日志记录不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32083407/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com