diatoz-log-monitor
v1.2.86
Published
A library for distributed request tracing and application logging on top of expressjs
Downloads
42
Maintainers
Readme
diatoz-log-monitor
A library for logging and tracing a distributed request
This library depends on the following packages:
- express-http-context used for storing the trace-id per request scope
- axios used for making Http calls
- log4js used for generating the logs appended with trace-id
Usage Steps
npm i diatoz-log-monitor
Provide the log4js configuration
First create a config folder in your working directory
vim config/index.js
const config = {
logging: {
appenders: { out: { type: "stdout", layout: { type: "basic" } } },
categories: { default: { appenders: ["out"], level: "info" } },
},
};
module.exports = config;
- Attach the middlewares with express app
const express = require("express");
const { httpContext, contextMiddleware } = require("diatoz-log-monitor");
const app = express();
// Use any third party middleware that does not need access to the context here, e.g.
// app.use(some3rdParty.middleware);
app.use(httpContext.middleware);
// all code from here on has access to the same context for each request
app.use(contextMiddleware);
- Now we can use the logger and restClient any where in the code
// import anywhere in the project
const {logger, restClient} = require('diatoz-log-monitor');
//it will forward the current request id to other service
function fetchUser(user_id) {
//as we are using axios under the hood, we can use all available function provided by axios
return await restClient.get(`url/${user_id}`,callback())
}
//it will log the current request trace id
function foo() {
logger().info('first log');
}
- Adding user information to log
//import httpcontext from package where your authentication code reside in your applicaiton
const { httpContext, contextMiddleware } = require("diatoz-log-monitor");
// Example authorization middleware
app.use((req, res, next) => {
userService.getUser(req.get("Authorization"), (err, result) => {
if (err) {
next(err);
} else {
//set user to context like this
httpContext.set("userId", result.userId);
next();
}
});
});
//User id will be added to logs
example logs:
[2019-10-18T19:49:11.980] [INFO] default - first log xRequestId: 5f884282-7d7f-4f8d-aa8b-64340fdbedfd
[2019-10-18T19:51:21.924] [INFO] default - Request to Service:, body=> foo.com/user/1 xRequestId: 5f884282-7d7f-4f8d-aa8b-64340fdbedfd