Node.js Debugging

By  on  

Proper logging is of massive utility for web apps, both during development and after deployment.  What can sometimes be difficult is organizing both the code and output of logging, i.e. knowing where each log message is coming from.  I recently found debug, a Node.js utility for organized and optimized debugging.

Creating an instance of debug is simple and you can create multiple loggers per file:

// Create multiple instances of debug
// In theory these would serve two different purposes
var debuggerA = require('debug')('worker:a'),
    debuggerB = require('debug')('worker:b');

// Sample usages of the debugger
function work() {
  debuggerA('doing lots of uninteresting work');
  setTimeout(work, Math.random() * 1000);
}

work();

function workb() {
  debuggerB('doing some work');
  setTimeout(workb, Math.random() * 2000);
}

workb();

Node.js Debug

The namespace given to a debug instance as you must use an environment variable to signal which loggers should go to STDOUT when the script is run:

// Show all debugger messages prefixed "worker:_____"
DEBUG=worker:* node app.js

The environment variable strategy for signaling which instances should output is brilliant as you may want only certain types of messages logged in production vs. development.  Use namespaces wisely!

I was also able to use chalk to color messages as desired:

var chalk = require('chalk');

debuggerA(chalk.red.bold('OMG an awful error!'));

debug is one of those utilities that has a very simple purpose and accomplishes the task well.  Don't skimp when it comes to logging informative messages -- they'll help you during development and could be critical when auditing the app after a security incident!

Recent Features

  • By
    Chris Coyier’s Favorite CodePen Demos

    David asked me if I'd be up for a guest post picking out some of my favorite Pens from CodePen. A daunting task! There are so many! I managed to pick a few though that have blown me away over the past few months. If you...

  • By
    Serving Fonts from CDN

    For maximum performance, we all know we must put our assets on CDN (another domain).  Along with those assets are custom web fonts.  Unfortunately custom web fonts via CDN (or any cross-domain font request) don't work in Firefox or Internet Explorer (correctly so, by spec) though...

Incredible Demos

  • By
    dwProgressBar v2:  Stepping and Events

    dwProgressBar was a huge hit when it debuted. For those of you who didn't catch my first post, dwProgressBar is a MooTools 1.2-based progress bar which allows for as much flexibility as possible. Every piece of dwProgressBar can be controlled by CSS...

  • By
    MooTools Documentation Search Favelet

    I'm going to share something with you that will blow your mind: I don't have the MooTools documentation memorized. I just don't. I visit the MooTools docs frequently to figure out the order of parameters of More classes and how best to use...

Discussion

  1. Allain

    Thanks for making this known. I’m pretty sure debug logs to STDERR so that piping still works.

Wrap your code in <pre class="{language}"></pre> tags, link to a GitHub gist, JSFiddle fiddle, or CodePen pen to embed!