Adam Wiggins, one of creator of Heroky wrote interested post about logging, you may find it interesting http://adam.heroku.com/past/2011/4/1/logs_are_streams_not_files/
On Monday, 28 April 2014 14:48:46 UTC+4, Jose Luis Rivas wrote: > > I would suggest you to not write directly but redirect output to a file. > > node app.js > file.log > > keep it simple. > > On 4/28/14, 5:45 AM, gen chen wrote: > > I am now working on a node.js project based on cluster. I got stuck on > > the logging. After doing some research, I worked out a solution. here > > is it. i don't know if it is a good idea. The idea is like this. only > > master process can wirte to the log file, if the current process is a > > worker, then it send a log message to the master and then write to the > > log file while the master can directly write to the log file. this can > > avoid multiple process open and write to a same file. > > > > 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{ > > logfile.write(logStr + '\n'); > > } > > } > > }); > > }); > > } > > > > > > function log(level, args){ > > > > if(levels.indexOf(level) < levels.indexOf(logLevel)) return; > > > > var args = Array.prototype.slice.call(args); > > > > args = args.map(function(a){ > > if(typeof a !== 'string') > > return JSON.stringify(a); > > else return a; > > }); > > var msg = util.format.apply(null, args); > > > > var out = []; > > out.push(new Date()); > > out.push('[' + level.toUpperCase() + ']'); > > out.push(msg); > > > > > > if(cluster.isMaster){ > > > > //write directly to the log file > > if(levels.indexOf(level) >= levels.indexOf('error')){ > > errorLogfile.write(out.join(' ') + '\n'); > > }else{ > > logfile.write(out.join(' ') + '\n'); > > } > > > > }else{ > > > > //send to master > > cluster.worker.process.send({ > > type : 'logging', > > data : { > > level : level, > > msg : out.join(' ') > > } > > }); > > } > > > > } > > > > > > logger.debug = function(){log('debug', arguments);} > > logger.info = function(){log('info', arguments);} > > logger.warn = function(){log('warn', arguments);} > > logger.error = function(){log('error', arguments);} > > logger.fatal = function(){log('fatal', arguments);} > > > > > > > > -- > > -- > > Job Board: http://jobs.nodejs.org/ > > Posting guidelines: > > https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines > > You received this message because you are subscribed to the Google > > Groups "nodejs" group. > > To post to this group, send email to nod...@googlegroups.com<javascript:> > > To unsubscribe from this group, send email to > > nodejs+un...@googlegroups.com <javascript:> > > For more options, visit this group at > > http://groups.google.com/group/nodejs?hl=en?hl=en > > > > --- > > You received this message because you are subscribed to the Google > > Groups "nodejs" group. > > To unsubscribe from this group and stop receiving emails from it, send > > an email to nodejs+un...@googlegroups.com <javascript:> > > <mailto:nodejs+un...@googlegroups.com <javascript:>>. > > For more options, visit https://groups.google.com/d/optout. > > -- > Jose Luis Rivas - http://joseluisrivas.net > Venezuela - GPG: 0xB9AC8C43 > -- -- Job Board: http://jobs.nodejs.org/ Posting guidelines: https://github.com/joyent/node/wiki/Mailing-List-Posting-Guidelines You received this message because you are subscribed to the Google Groups "nodejs" group. To post to this group, send email to nodejs@googlegroups.com To unsubscribe from this group, send email to nodejs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/nodejs?hl=en?hl=en --- You received this message because you are subscribed to the Google Groups "nodejs" group. To unsubscribe from this group and stop receiving emails from it, send an email to nodejs+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.