diff --git a/README.md b/README.md index 820ec03..6c452a8 100644 --- a/README.md +++ b/README.md @@ -37,9 +37,9 @@ instance.interceptors.request.use(AxiosLogger.requestLogger); If you want to use your own interceptor, you can compose(mixin) with `requestLogger`. ```javascript -instance.interceptors.request.use((config) => { +instance.interceptors.request.use((request) => { // write down your request intercept. - return AxiosLogger.requestLogger(config); + return AxiosLogger.requestLogger(request); }); ``` @@ -94,18 +94,20 @@ setGlobalConfig({ prefixText: 'your prefix', dateFormat: 'HH:MM:ss', status: false, + header: true, }); ``` Or it can also be passed on as a second argument and applied locally. ```javascript -instance.interceptors.request.use((config) => { +instance.interceptors.request.use((request) => { // write down your request intercept. - return AxiosLogger.requestLogger(config, { + return AxiosLogger.requestLogger(request, { prefixText: 'your prefix', dateFormat: 'HH:MM:ss', status: false, + header: true, }); }); ``` @@ -114,6 +116,7 @@ instance.interceptors.request.use((config) => { - prefixText: string | false (default Axios) - dateFormat: [dateformat](https://github.com/felixge/node-dateformat) | false (default isoDateTime) +- header: boolean (default false) ## CONTRIBUTE diff --git a/package.json b/package.json index ae5cfbf..e45f51c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "axios-logger", - "version": "2.1.0", + "version": "2.2.0", "description": "Beautify Axios Logging Messages", "main": "lib/index.js", "keywords": [ diff --git a/src/common/string-builder.ts b/src/common/string-builder.ts index 14bb4f9..d39f54d 100644 --- a/src/common/string-builder.ts +++ b/src/common/string-builder.ts @@ -5,10 +5,12 @@ import chalk from 'chalk'; class StringBuilder { private config: GlobalLogConfig; private printQueue: Array; + private filteredHeaderList: Array; constructor(config: GlobalLogConfig) { this.config = config; this.printQueue = []; + this.filteredHeaderList = ['common', 'delete', 'get', 'head', 'post', 'put', 'patch', 'content-type', 'content-length', 'vary', 'date', 'connection', 'content-security-policy']; } makePrefix(logType: string | false) { @@ -24,6 +26,20 @@ class StringBuilder { return this; } + makeHeader(headers?: { [key:string] : {value:string}}) { + if(this.config.headers && headers) { + const headerMap:{ [key:string] : {value:string}} = {}; + for(let key in headers) { + if(!this.filteredHeaderList.includes(key)) { + headerMap[key] = headers[key]; + } + } + + this.printQueue.push(JSON.stringify(headerMap)); + } + return this; + } + makeUrl(url?: string) { if(url) this.printQueue.push(url); return this; diff --git a/src/common/types.ts b/src/common/types.ts index 1492e22..aaad9cd 100644 --- a/src/common/types.ts +++ b/src/common/types.ts @@ -1,13 +1,13 @@ export interface CommonConfig { prefixText?: string | boolean, dateFormat?: string | boolean, + headers?: boolean, } export interface GlobalLogConfig extends CommonConfig { data?: boolean, url?: boolean, method?: boolean, - headers?: boolean, status?: boolean, statusText?: boolean, code?: boolean, @@ -17,14 +17,12 @@ export interface RequestLogConfig extends CommonConfig { data?: boolean, url?: boolean, method?: boolean, - headers?: boolean, } export interface ResponseLogConfig extends CommonConfig { data?: boolean, status?: boolean, statusText?: boolean, - headers?: boolean, } export interface ErrorLogConfig extends CommonConfig { diff --git a/src/logger/error.ts b/src/logger/error.ts index 8c82b5f..8484000 100644 --- a/src/logger/error.ts +++ b/src/logger/error.ts @@ -8,11 +8,12 @@ function errorLoggerWithoutPromise(error: AxiosError, config?: ErrorLogConfig) { const {config: {url, method}, response} = error; - let status, statusText, data; + let status, statusText, data, headers; if(response){ status = response.status; statusText = response.statusText; data = response.data; + headers = response.headers; } const buildConfig = config ? config : mergeWithGlobalConfig(config); @@ -24,6 +25,7 @@ function errorLoggerWithoutPromise(error: AxiosError, config?: ErrorLogConfig) { .makeUrl(url) .makeMethod(method) .makeStatus(status, statusText) + .makeHeader(headers) .makeData(data) .build(); diff --git a/src/logger/request.ts b/src/logger/request.ts index 59ac2ba..4f57b18 100644 --- a/src/logger/request.ts +++ b/src/logger/request.ts @@ -6,7 +6,7 @@ import { printLog } from '../common/print'; function requestLogger(request: AxiosRequestConfig, config?: RequestLogConfig) { - const {url, method, data} = request; + const {url, method, data, headers} = request; const buildConfig = config ? config : mergeWithGlobalConfig(config); const stringBuilder = new StringBuilder(buildConfig); @@ -15,6 +15,7 @@ function requestLogger(request: AxiosRequestConfig, config?: RequestLogConfig) { .makeDateFormat() .makeUrl(url) .makeMethod(method) + .makeHeader(headers) .makeData(data) .build(); diff --git a/src/logger/response.ts b/src/logger/response.ts index bab6033..0e30978 100644 --- a/src/logger/response.ts +++ b/src/logger/response.ts @@ -5,7 +5,7 @@ import StringBuilder from '../common/string-builder'; import { printLog } from '../common/print'; function responseLogger(response: AxiosResponse, config?: ResponseLogConfig) { - const {config: {url, method}, status, statusText, data} = response; + const {config: {url, method}, status, statusText, data, headers} = response; const buildConfig = config ? config : mergeWithGlobalConfig(config); const stringBuilder = new StringBuilder(buildConfig); @@ -15,6 +15,7 @@ function responseLogger(response: AxiosResponse, config?: ResponseLogConfig) { .makeUrl(url) .makeMethod(method) .makeStatus(status, statusText) + .makeHeader(headers) .makeData(data) .build(); diff --git a/test/server.js b/test/server.js index bdbb73b..8fcd4de 100644 --- a/test/server.js +++ b/test/server.js @@ -18,7 +18,9 @@ app.use(bodyParser.json({ limit: '50mb' })); app.use(cookieParser()); app.get('/test/get', (req, res, next) => { - const instance = axios.create(); + const instance = axios.create({ + headers: { 'X-Custom-Header': 'foobar' }, + }); instance.interceptors.request.use(AxiosLogger.requestLogger); instance.interceptors.response.use(AxiosLogger.responseLogger); @@ -52,6 +54,9 @@ app.get('/test/get/error', (req, res, next) => { * /test/* -> /echo/* */ app.get('/echo/get', (req, res, next) => { + res.set({ + 'X-Custom-Response': 'foobar', + }); res.json({ status: 200, message: 'echo get', @@ -59,6 +64,9 @@ app.get('/echo/get', (req, res, next) => { }); app.post('/echo/post', (req, res, next) => { + res.set({ + 'X-Custom-Response': 'foobar', + }); res.json({ status: 200, message: 'echo post',