Adding timestamps to all console messages Adding timestamps to all console messages node.js node.js

Adding timestamps to all console messages


It turns out, you can override the console functions at the top of the app.js file, and have it take effect in every other module. I got mixed results because one of my modules is forked as a child_process. Once I copied the line to the top of that file as well, all works.

For the record, I installed the module console-stamp (npm install console-stamp --save), and added this line to the top of app.js and childProcess.js:

// add timestamps in front of log messagesrequire('console-stamp')(console, '[HH:MM:ss.l]');

My problem now was that the :date format of the connect logger uses UTC format, rather than the one I'm using in the other console calls. That was easily fixed by registering my own time format (and as a side effect, requiring the dateformat module that console stamp comes with, rather than installing another one):

// since logger only returns a UTC version of date, I'm defining my own date format - using an internal module from console-stampexpress.logger.format('mydate', function() {    var df = require('console-stamp/node_modules/dateformat');    return df(new Date(), 'HH:MM:ss.l');});app.use(express.logger('[:mydate] :method :url :status :res[content-length] - :remote-addr - :response-time ms'));

Now my log files look organized (and better yet, parseable):

[15:09:47.746] staging server listening on port 3000[15:09:49.322] connected to database server xxxxx successfully[15:09:52.743] GET /product 200 - - 127.0.0.1 - 214 ms[15:09:52.929] GET /stylesheets/bootstrap-cerulean.min.css 304 - - 127.0.0.1 - 8 ms[15:09:52.935] GET /javascripts/vendor/require.js 304 - - 127.0.0.1 - 3 ms[15:09:53.085] GET /javascripts/product.js 304 - - 127.0.0.1 - 2 ms...


The module log-timestamp works for me.

npm install log-timestamp

It's simple to use:

console.log('Before log-timestamp');require('log-timestamp');console.log('After log-timestamp');
Before log-timestamp[2012-08-23T20:08:32.000Z] After log-timestamp


Create a file with the following:

var log = console.log;console.log = function(){  log.apply(console, [Date.now()].concat(arguments));};

Require it in your app before you log anything. Do the same for console.error if needed.

Note that this solution will destroy variable insertion (console.log("he%s", "y") // "hey") if you're using that. If you need that, just log the timestamp first:

log.call(console, Date.now());log.apply(console, arguments);