Better Logging in Azure Mobile Services
Debugging in azure mobile services can be frustrating, it only runs on Azure servers and you can’t run any debugging tools on it. Logging is pretty much the only way to debug your services. The default logging using console.log is fairly limited. You can’t turn it on or off easily or change the logging level. It also doesn’t include the line number which can make it harder to debug a large service.
Installing Tracer
Fortunately there are some excellent node modules for logging that work fairly well with Azure Mobile Services. I’m using the excellent tracer module.
Installing the module is fairly straight forward, you will first need to setup git access. You then need to install the trace module.
npm install tracer
var logger = require('tracer').console();
logger.log('hello');
logger.trace('hello', 'world');
logger.debug('hello %s', 'world', 123);
logger.info('hello %s %d', 'world', 123, {foo:'bar'});
logger.warn('hello %s %d %j', 'world', 123, {foo:'bar'});
logger.error('hello %s %d %j', 'world', 123, {foo:'bar'}, [1, 2, 3, 4], Object);
Setting the Logging Level
You can set the logging level fairly simply:
var logger = require('tracer').colorConsole({level:'warn'});
var logger = require('tracer').colorConsole({level:process.env.LoggerLevel});
Using Colour and Log Watcher
The web view of the logs isn’t very useful for logging, instead I use a node.js script from Josh Twist that polls the logs from the api. This allows you to see the errors as they happened and stops you from having to refresh a web page manually.
As an additional bonus you can use colours when you are using the script. This makes it much easier to keep things organized.
var _ = require('lodash');
var colors = require('colors');
var logger = require('tracer').colorConsole({filters : {
log : colors.white,
trace : colors.grey,
debug : colors.magenta,
info : colors.green,
warn : colors.yellow,
error : [ colors.red, colors.bold ]
},
level:process.env.LoggerLevel //log,trace,debug,info,warn,error
});