NOTE Forked from villadora/express-bunyan-logger
Added in skipFn
which the above lacked.
A express logger middleware powered by bunyan.
This year as work content change, I have no spare time to maintaining the node modules, if anyone want to take or keep maintaining, just contact me via [email protected] with Title contains: "Wanted: npm package xxxx". Thx.
npm install express-bunyan-logger
To use the logger:
app.use(require('express-bunyan-logger')());
To use the errorLogger:
app.use(require('express-bunyan-logger').errorLogger());
And you can also pass bunyan logger options to the logger middleware:
app.use(require('express-bunyan-logger')({
name: 'logger',
streams: [{
level: 'info',
stream: process.stdout
}]
}));
Change default format:
app.use(require('express-bunyan-logger')({
format: ":remote-address - :user-agent[major] custom logger"
});
And a child logger will be attached to each request object:
app.use(require('express-bunyan-logger')();
app.use(function(req, res, next) {
req.log.debug('this is debug in middleware');
next();
});
Format string, please go the source code to the metadata. ":name" will print out meta.name; ":name[key]" will print out the property 'key' of meta.name.
Or you can pass a function to options.format. This function accept a object as argument and return string.
Whether to parse user-agent in logger, default is =true=.
Function that translate statusCode into log level. The meta
argument is an object consisting of all the fields gathered by bunyan-express-logger, before exclusions are applied.
function(status, err /* only will work in error logger */, meta) {
// return string of level
if (meta["response-time"] > 30000) {
return "fatal";
} else {
return "info";
}
}
Function that is passed req
and res
, and returns an object whose properties will be added to the meta object passed to bunyan
function(req, res) {
if (req.user) {
return {
_id: req.user._id,
name: req.user.name
}
}
}
Function that is passed req
and res
, and allows the ability to skip logging if the condition is met
function(req, res) {
// Do not log health check from ELB-HealthChecker/2.0
return /^[ELB-]+/.test(req.headers['user-agent']);
}
Array of string, Those fields will be excluded from meta object which passed to bunyan
Array of strings to obfuscate.
These strings can be in dotted notation, for instance body.password
, and it will only replace that specific value.
This will replace the values in log messages with a placeholder.
Placeholder to use when obfuscating values.
This is only applicable when there are values to obfuscate.
Default is [HIDDEN]
.
An object of bunyan serializers. They are passed on to bunyan. The default serializers are defined as follows:
{
req: bunyan.stdSerializers.req,
res: bunyan.stdSerializers.res,
err: bunyan.stdSerializers.err
}
Write log line on request instead of response (for response times)
By default, express-bunyan-logger
will generate an unique id for each request, and a field 'req_id' will be added to child logger in request
object.
If you have already use other middleware/framework to generate request id, you can pass a function to retrieve it:
// suppose connect-requestid middleware is already added.
app.use(require('express-bunyan-logger')({
genReqId: function(req) {
return req.id;
}
});
(The BSD License)
Copyright (c) 2013, Villa.Gao <[email protected]>;