1.0.1 • Published 9 years ago

express-router-bunyan-loglevel v1.0.1

Weekly downloads
1
License
MIT
Repository
github
Last release
9 years ago

Router

NPM version Build Status Coverage Status Dependencies

Express router to set the log level(s) of a Bunyan logger.

Installation

$ npm install express-router-bunyan-loglevel

Usage

var createRouter = require( 'express-router-bunyan-loglevel' );

createRouter( logger )

Returns an Express router configured to use a Bunyan logger.

var bunyan = require( 'bunyan' );

var logger = bunyan.createLogger({
	'name': 'logger',
	'streams': [
		{
			'name': 'main',
			'level': 'info',
			'stream': process.stdout
		}
	]
});

var router = createRouter( logger );

router

A mountable Express route handler.

var express = require( 'express' );

// Create a new application:
var app = express();

// Mount the route handler on the application:
app.use( '/logger', router );

Routes

PUT /loglevel

URI endpoint for setting the server application global log level.

Request: (application/json)

The request should include a JSON body having the following fields:

  • level: log level. The level may be specified as either a string or number. The string may be one of the following (see node-bunyan; string options listed along with their numeric equivalents):
    • (60) fatal
    • (50) error
    • (40) warn
    • (30) info
    • (20) debug
    • (10) trace
{
	"level": <string|number>
}
Response: 204 (text/plain)

The response body will be

OK
Error: 400 (application/json)

If a request contains invalid body parameters, an error response will contain the error status and an associated message.

{
	"status": 400,
	"message": "...'"
}
Examples

From the command-line,

$ curl -X PUT -d '{"level":"info"}' 'http://127.0.0.1:<port>/loglevel' --header "Content-type:application/json"

From another Node application,

var request = require( 'request' );

var body = {
	'level': 'info'
};

request({
	'uri': 'http://127.0.0.1:<port>/loglevel',
	'method': 'PUT',
	'json': body
}, onResponse );

function onResponse( error, response, body ) {
	if ( error ) {
		console.error( error );
		return;
	}
	console.log( body );
}

A successful request will receive the following response body:

OK

===

PUT /loglevel/:name

URI endpoint for setting the log level for a log stream specified by the name parameter.

Request: (application/json)

The request should include a JSON body having the following fields:

  • level: log level. The level may be specified as either a string or number. The string may be one of the following (see node-bunyan; string options listed along with their numeric equivalents):
    • (60) fatal
    • (50) error
    • (40) warn
    • (30) info
    • (20) debug
    • (10) trace
{
	"level": <string|number>
}
Response: 204 (text/plain)

The response body will be

OK
Error: 400 (application/json)

If a request contains invalid body parameters, an error response will contain the error status and an associated message.

{
	"status": 400,
	"message": "...'"
}
Examples

From the command-line,

$ curl -X PUT -d '{"level":"info"}' 'http://127.0.0.1:<port>/loglevel/<name>' --header "Content-type:application/json"

From another Node application,

var request = require( 'request' );

var body = {
	'level': 'info'
};

request({
	'uri': 'http://127.0.0.1:<port>/loglevel/<name>',
	'method': 'PUT',
	'json': body
}, onResponse );

function onResponse( error, response, body ) {
	if ( error ) {
		console.error( error );
		return;
	}
	console.log( body );
}

A successful request will receive the following response body:

OK

Examples

var bunyan = require( 'bunyan' ),
	request = require( 'request' ),
	express = require( 'express' ),
	createRouter = require( 'express-router-bunyan-loglevel' );


// LOGGER //

var logger = bunyan.createLogger({
	'name': 'logger',
	'streams': [
		{
			'name': 'beep',
			'level': 'info',
			'stream': process.stdout
		},
		{
			'name': 'boop',
			'level': 'debug',
			'stream': process.stdout
		}
	]
});


// APP //

var app = express();

// Mount the router on the application:
app.use( '/', createRouter( logger ) );

// Create an HTTP server:
app.listen( 7331, onListen );

function onListen() {
	logger.info( 'Server is listening for requests on port: 7331.' );
	run();
}


// RUN //

function run() {
	setTimeout( setOne, 1000 );
	setTimeout( setAll, 2500 );
	setTimeout( exit, 3000 );
}

function setOne() {
	request({
		'method': 'PUT',
		'uri': 'http://127.0.0.1:7331/loglevel/beep',
		'json': {
			'level': 'fatal'
		}
	}, onResponse );
}

function setAll() {
	request({
		'method': 'PUT',
		'uri': 'http://127.0.0.1:7331/loglevel',
		'json': {
			'level': 'warn'
		}
	}, onResponse );
}

function onResponse( error, response ) {
	if ( error ) {
		throw error;
	}
	console.log( 'Status: %s.', response.statusCode );
}

function exit() {
	process.exit( 0 );
}

To run the example code from the top-level application directory,

$ node ./examples/index.js

Tests

Unit

Unit tests use the Mocha test framework with Chai assertions. To run the tests, execute the following command in the top-level application directory:

$ make test

All new feature development should have corresponding unit tests to validate correct functionality.

Test Coverage

This repository uses Istanbul as its code coverage tool. To generate a test coverage report, execute the following command in the top-level application directory:

$ make test-cov

Istanbul creates a ./reports/coverage directory. To access an HTML version of the report,

$ make view-cov

License

MIT license.

Copyright

Copyright © 2015. Athan Reines.