Logging with Winston
We will now add logging to our application using Winston; let's install Winston:
npm install winston --save
The 404 middleware will need to log 404 not found, so let's create a simple logger module, ./lib/logger/index.js
; the details of our logger will be configured with Nconf. We import Winston and the configuration modules. We define our Logger
function, which constructs and returns a file logger—winston.transports.File
—that we configure using values from our config
. We default the loggers maximum size to 1 MB, with a maximum of three rotating files. We instantiate the Logger
function, returning it as a singleton.
var winston = require('winston') , config = require('../configuration'); function Logger(){ return winston.add(winston.transports.File, { filename: config.get('logger:filename'), maxsize: 1048576, maxFiles: 3, level: config.get('logger:level') }); } module.exports = new Logger();
Let's add the Logger
configuration details to our config files ./config/development.json
and ./config/test.json
:
{ "express": { "port": 3000 }, "logger" : { "filename": "logs/run.log", "level": "silly", } }
Let's alter the ./lib/middleware/notFound.js
middleware to log errors. We import our logger
and log an error message via logger
when a 404 Not Found
response is thrown:
var logger = require("../logger"); exports.index = function(req, res, next){ logger.error('Not Found'); res.json(404, 'Not Found'); };