TypeScript icon, indicating that this package has built-in type declarations

2.0.1 • Public • Published

Axios Logger Interceptor

Log request and response, redact all possible PII sources by default, but allow to add custom redact paths so more info can be logged.


yarn add @ovotech/axios-logger
import { axiosLogger, redactHeader } from '@ovotech/axios-logger';
import axios from 'axios';

const logger = axiosLogger((level, meta, config) => console.log(level, meta, config.url));

const api = axios.create();
api.interceptors.response.use(logger.response.onFullfilled, logger.response.onRejected);

// ...


const body = { user: { cards: [{ id: '111' }, { id: '222' }] } };
api.post('/update/path', body, { headers: { [redactHeader]: 'requestBody.user.cards.*.id' } });

You have 3 interceptors. logger.request.onFullfilled, logger.response.onFullfilled and logger.response.onRejected.

  • logger.request.onFullfilled used to setup the initial execution time. If omitted request time would not be logged.
  • logger.response.onFullfilled logs a successful response
  • logger.response.onRejected logs an error

Each one can be omitted if you don't want or need that feature.

The log function will receive 3 arguments - level, meta and axios request config. The first one indicates what type of log level to use - "info" for success and "error" for error. The second contains an object of data to log.

  uri: '/my/path',
  method: 'get',
  params: { id: '10' }
  requestBody: { id: '10' },
  responseBody: { user: 'Name' },
  status: 200,
  responseTime: 21,

By default uri, params, requestBody and responseBody will be "redacted", since they can contain personally identifiable information. You can control that with the redactHeader. Its a comma separated list of dot delimited field paths to be redacted. Can contain wildcard * path to target all array items.

For example to redact some fields.

api.post('/update/path', body, { headers: { [redactHeader]: 'requestBody.id, responseBody.user' });

You can also set redact at the axios instance level for global redaction rules:

const api = axios.create({ redact: ['requestBody'] });

Granular logging

You can perform different things on error / success by inspecting the "level" argument, passed to the log function.

import { axiosLogger } from '@ovotech/axios-logger';
import axios from 'axios';

const logger = axiosLogger((level, meta) => {
  if (level === 'info') {
    myOwnLogger.info('Successful request', meta);
  if (level === 'error') {
    myOwnLogger.error('Error request', meta);

Running the tests

You can run the tests with:

yarn test

Coding style (linting, etc) tests

Style is maintained with prettier and tslint

yarn lint


Deployment is preferment by lerna automatically on merge / push to master, but you'll need to bump the package version numbers yourself. Only updated packages with newer versions will be pushed to the npm registry.


Have a bug? File an issue with a simple example that reproduces this so we can take a look & confirm.

Want to make a change? Submit a PR, explain why it's useful, and make sure you've updated the docs (this file) and the tests (see test folder).


This project is licensed under Apache 2 - see the LICENSE file for details




Package Sidebar


npm i @ovotech/axios-logger

Weekly Downloads






Unpacked Size

16 kB

Total Files


Last publish


  • ovox
  • oep-accounts-bot
  • ovo.backstage.admins
  • bookings-team
  • orion-bot
  • bizval-bot
  • oeptariffs
  • props
  • metering-reads-health-bot
  • ovotech-identity
  • paceteamkaluza
  • trading-and-dispatch
  • retail-payg-tech
  • accrecovo
  • ovo.trading.tech
  • qe-team
  • ovotech-smart-thermostat
  • rise-team
  • engagement-insights
  • myovo-self-serve-service-account
  • mars-rover
  • ape-team
  • kaluza-devex
  • ohs-aurora
  • kaluza-rnr
  • ipa-bot
  • kawbot
  • data.discovery.ovo
  • ovotech-sg
  • ovotech-qs
  • ovoenergyapps
  • homemoves
  • ovo-oot-bot
  • cp-ui-tooling
  • ovo-bit-tech
  • sir_hiss