Skip to content

Express Integration

Nils edited this page Aug 26, 2014 · 2 revisions

Express Integration

Bragi can easily be integrated into express to log all route requests and errors. The following code assumes Express4.

Logging info on all requests

Here's an example of how to use bragi to log all requests received and responses sent when being called with express:

function logRoute(req,res,next){
    req._startTime = new Date();

    // Log requests when the request is made
    logger.log('express-app', 
        logger.util.print(logger.util.symbols.arrow, 'yellow') +  
        logger.util.print(req.method, 'blue') +
        ' : ' + 
        logger.util.print(req.url, 'cyan') + 
        logger.util.print(' making request...', 'grey')
    );

    var end = res.end;
    res.end = function(chunk, encoding) {
        res.responseTime = new Date() - req._startTime;

        var resTime = '';
        if(res.responseTime < 100){
            resTime = logger.util.print(res.responseTime + ' ms', 'green');
        } else if(res.responseTime < 1000){
            resTime = logger.util.print(res.responseTime + ' ms', 'yellow');
        } else {
            resTime = logger.util.print(res.responseTime + ' ms', 'red');
        }

        var symbol = logger.util.symbols.success;
        var statusCode = logger.util.print(res.statusCode, 'green');

        if(res.statusCode >= 400){ 
            symbol = logger.util.symbols.warn;
            statusCode = logger.util.print(res.statusCode, 'yellow');
        }
        if(res.statusCode >= 500){ 
            symbol = logger.util.symbols.error;
            statusCode = logger.util.print(res.statusCode, 'red');
        }

        logger.log('express-app', 
            symbol + 
            logger.util.print(req.method, 'blue') +
            ' : ' + 
            logger.util.print(req.url, 'cyan') +
            ' ' + 
            statusCode + ' ' +
            '(' + resTime + ') ' +
            logger.util.print(' request completed!', 'grey')
        );

        res.end = end;
        res.end(chunk, encoding);
    };

    next();
}

// elsewhere, have the express app use this:
app.use(logRoute);