A package to include request/response logging inside services
npm install @somosphi/logger``sh`
npm install @somosphi/logger
1. A simple logger that uses bunyan as logging package.
2. A middleware for Express services, used to log all requests received by the service
3. An interceptor for axios request package, logging all requests that axios executes
4. An interceptor for request package, logging all requests that request executes
5. A redact package to remove secret information from the logs
The logger configuration (type LoggerConfig) has these properties:
|Name|Description|Type|Required|
|----|-----------|----|--------|
|PROJECT_NAME|The name of the project using the logger|String|true|
|LOG_LEVEL|The level to start logging the messages|Log Level|false|
|OMIT_ROUTES|Routes that the express middleware will not log|String[]|false|
|STREAMS|Configuration for the location of the output of the log level|Stream|false|
#### Simple Logger
`javascript
const { Logger } = require('@somosphi/logger').init({
PROJECT_NAME: 'project-name',
});
Logger.info(JSON.stringify({
message: 'This is a cool message',
origin: 'Some Place',
status: 200,
}));
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":245,"level":30,"msg":"{\"message\":\"This is a cool message\",\"origin\":\"Some Place\",\"status\":200}","time":"2019-09-10T00:42:46.361Z","v":0}
*/
`
#### Express Middleware
`javascript
const { ExpressLogger } = require('@somosphi/logger').init({
PROJECT_NAME: 'project-name',
});
/* Request/Response Logger /
app.use(ExpressLogger.onSuccess.bind(ExpressLogger));
app.use(ExpressLogger.onError.bind(ExpressLogger));
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":298,"level":30,"msg":"{\"origin\":\"Express\",\"requrestId\":\"77215bf8-f821-4faf-bcc1-2c0260eafc66\",\"type\":\"Request or Response\",\"headers\":{\"data\":\"all headers\"},\"body\":{\"data\":\"all body\"}}","time":"2019-09-10T00:49:04.394Z","v":0}
*/
`
#### Axios Interceptor
`javascript
const { AxiosLogger } = require('@somosphi/logger').init({
PROJECT_NAME: 'project-name',
});
const axiosInstance = require('axios').default.create({ ...config });
AxiosLogger.attachInterceptor.bind(AxiosLogger)(axiosInstance);
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":24654,"level":30,"msg":"{\"origin\":\"Axios\",\"requrestId\":\"77215bf8-f821-4faf-bcc1-2c0260eafc66\",\"type\":\"Request or Response\",\"headers\":{\"data\":\"all headers\"},\"body\":{\"data\":\"all body\"},\"method\":\"HTTP Method\",\"url\":\"https://somosphi.com\",\"data\":{\"data\":\"all data from axios\"},\"params\":{\"data\":\"params used\"},\"status\":200,\"statusText\":\"OK\"}","time":"2019-09-10T00:53:40.767Z","v":0}
*/
`
#### Request Debug
`javascript
const { RequestLogger } = require('@somosphi/logger').init({
PROJECT_NAME: 'project-name',
});
const request = require('request');
RequestLogger.attachDebug.bind(RequestLogger)(request);
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":24654,"level":30,"msg":"{\"origin\":\"Request\",\"requrestId\":\"77215bf8-f821-4faf-bcc1-2c0260eafc66\",\"type\":\"Request or Response\",\"headers\":{\"data\":\"all headers\"},\"body\":{\"data\":\"all body\"},\"method\":\"HTTP Method\",\"url\":\"https://somosphi.com\",\"data\":{\"data\":\"all data from axios\"},\"params\":{\"data\":\"params used\"},\"status\":200,\"statusText\":\"OK\"}","time":"2019-09-10T00:53:40.767Z","v":0}
*/
`
#### Simple Logger
`javascript
import { init } from '@somosphi/logger';
const {
Logger,
} = init({
PROJECT_NAME: 'project-name',
});
Logger.info(JSON.stringify({
message: 'This is a cool message',
origin: 'Some Place',
status: 200,
}));
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":245,"level":30,"msg":"{\"message\":\"This is a cool message\",\"origin\":\"Some Place\",\"status\":200}","time":"2019-09-10T00:42:46.361Z","v":0}
*/
`
#### Express Middleware
`javascript
import { init } from '@somosphi/logger';
const {
ExpressLogger,
} = init({
PROJECT_NAME: 'project-name',
});
/* Request/Response Logger /
app.use(ExpressLogger.onSuccess.bind(ExpressLogger));
app.use(ExpressLogger.onError.bind(ExpressLogger));
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":298,"level":30,"msg":"{\"origin\":\"Express\",\"requrestId\":\"77215bf8-f821-4faf-bcc1-2c0260eafc66\",\"type\":\"Request or Response\",\"headers\":{\"data\":\"all headers\"},\"body\":{\"data\":\"all body\"}}","time":"2019-09-10T00:49:04.394Z","v":0}
*/
`
#### Axios Interceptor
`javascript
import { init } from '@somosphi/logger';
import axios from 'axios';
const {
AxiosLogger,
} = init({
PROJECT_NAME: 'project-name',
});
const axiosInstance = axios.default.create({ ...config });
AxiosLogger.attachInterceptor.bind(AxiosLogger)(axiosInstance);
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":24654,"level":30,"msg":"{\"origin\":\"Axios\",\"requrestId\":\"77215bf8-f821-4faf-bcc1-2c0260eafc66\",\"type\":\"Request or Response\",\"headers\":{\"data\":\"all headers\"},\"body\":{\"data\":\"all body\"},\"method\":\"HTTP Method\",\"url\":\"https://somosphi.com\",\"data\":{\"data\":\"all data from axios\"},\"params\":{\"data\":\"params used\"},\"status\":200,\"statusText\":\"OK\"}","time":"2019-09-10T00:53:40.767Z","v":0}
*/
`
#### Request Debug
`javascript
import { init } from '@somosphi/logger';
import request from 'request';
const {
RequestLogger,
} = init({
PROJECT_NAME: 'project-name',
});
RequestLogger.attachDebug.bind(RequestLogger)(request);
/*
This will create the following log:
{"name":"project-name","hostname":"hostname.local","pid":24654,"level":30,"msg":"{\"origin\":\"Request\",\"requrestId\":\"77215bf8-f821-4faf-bcc1-2c0260eafc66\",\"type\":\"Request or Response\",\"headers\":{\"data\":\"all headers\"},\"body\":{\"data\":\"all body\"},\"method\":\"HTTP Method\",\"url\":\"https://somosphi.com\",\"data\":{\"data\":\"all data from axios\"},\"params\":{\"data\":\"params used\"},\"status\":200,\"statusText\":\"OK\"}","time":"2019-09-10T00:53:40.767Z","v":0}
*/
`
#### Redact Logger
`javascript
import { init } from '@somosphi/logger';
const {
RequestLogger,
Redact,
} = init({
PROJECT_NAME: 'project-name',
});
RequestLogger.info(Redact.map({
'password': 'secret',
}));
RequestLogger.info(Redact.map({
'code': 'secret',
}));
Redact.addKey(/code/i);
RequestLogger.info(Redact.map({
'code': 'secret',
}));
``