parse-logs
Parse and validate logs to adhere to the message and meta standards from Lad and Cabin.
Table of Contents
Install
npm:
npm install parse-logs
How does it work
This package exports a function that accepts two arguments req
which is either ctx.request
from Koa or req
from Express, and userFields
, which is an Array of user fields to pick using parse-request's userFields
option (by default it is simply [ "ip_address" ]
).
You use this function to parse an inbound HTTP request body in order to return and validate a log object.
In order for this to work properly, the body
must already be a parsed Object (it cannot be a String).
For example, below is an example request Object that you can pass as req
to parseLogs(req)
:
const parseLogs = require('.');
const req = {
method: 'GET',
query: {},
headers: {
'X-Request-Id': '123456',
'User-Agent': 'Test User Agent'
},
cookies: {},
body: {
err: {
message: 'Oops',
stack: '...'
},
message: 'Oops',
meta: {
level: 'error',
user: {
id: '123456',
email: 'test@example.com'
}
}
},
url: ''
};
console.log(parseLogs(req));
Outputs to console:
{
err: Error: Oops
at ... (::),
message: 'Oops',
meta: {
level: 'error',
user: { id: '123456', email: 'test@example.com' },
id: '636e9a831bdc98012abd4519',
timestamp: '2022-11-11T18:54:59.000Z',
request: { method: 'GET', headers: [Object], id: '123456' },
duration: 0.728459
}
}
Note that there is a user
object returned, which will be parsed from req.user
automatically.
The user
object will also have a ip_address
property added, but only if one does not already exists and if an IP address was actually detected.
Additionally, err
, meta.err
, and meta.original_err
properties from a request body payload will be parsed into Error objects with stack traces (normalized across Node and browser environments).
For an example implementation please refer to the Forward Email codebase.
Usage
Koa
const parseLogs = require('parse-logs');
const bodyParser = require('koa-bodyparser');
app.use(bodyParser());
app.use((ctx, next) => {
const log = parseLogs(ctx.request);
console.log(log);
ctx.body = log;
});
Express
const parseLogs = require('parse-logs');
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded());
app.use((req, res, next) => {
const log = parseLogs(req);
console.log(log);
res.json(log);
});
Contributors
Name | Website |
---|---|
Nick Baugh | http://niftylettuce.com/ |