我现在正在研究一个基于集群的 node.js 项目。我被困在日志中。经过一番研究,我想出了一个解决方案。就这个。我不知道这是否是个好主意。这个想法是这样的。只有master进程可以写入日志文件,如果当前进程是worker,则向master发送日志消息然后写入日志文件,而master可以直接写入日志文件。这可以避免多个进程打开并写入同一个文件。
var util = require('util');
var fs = require('fs');
var cluster = require('cluster');
var logger = module.exports;
var levels = ['debug', 'info', 'warn', 'error', 'fatal'];
var logLevel = 'debug';
var logfile = null;
var errorLogfile = null;
if(cluster.isMaster){
logfile = fs.createWriteStream('debug.log', {flags:'a'});
errorLogfile = fs.createWriteStream('error.log', {flags:'a'});
cluster.on('online', function(worker){
//collect log message from child and write to logfile.
worker.on('message', function(msg){
if(msg.type == 'logging') {
var level = msg.data.level;
var logStr = msg.data.msg;
if(levels.indexOf(level) >= levels.indexOf('error')){
errorLogfile.write(logStr + '\n');
}else{ …Run Code Online (Sandbox Code Playgroud)