0

I am using koa-bunyan-logger to log my request like this:

'use strict'

const koaBunyanLogger = require('koa-bunyan-logger');
const Koa = require('koa');
const mount = require('koa-mount')
const dbDriver = require('./database/interface')
const { userAgent } = require('koa-useragent');

const app = new Koa();

const server = app
  .use(koaBunyanLogger())
  .use(koaBunyanLogger.requestLogger({
    updateLogFields: function (fields) {
      delete fields.req.headers.authorization
    }
  }))

  .use(mount(require('./routes/auth/jwt')))
  .use(mount(require('./routes/knexplay')))
  .listen(3000);

module.exports = server

What I am trying to do is to avoid logging tokens. But what it does is deleting the field from the original request object, crashing the app.

Even if I use formatRequestMessage(), it only effects msg field.

Is there a way to filter fields somehow?

Using serializer I am able to solve the problem but not sure if it is the best approach. Here is the code I used:

.use(koaBunyanLogger({
    serializers: {
      req: function (req) {

        const { authorization, ...keepHeaders } = req.headers
        return {
          method: req.method,
          url: req.url,
          headers: keepHeaders
        };
      },
      res: function (res) {

        const { authorization, ...keepHeaders } = res.req.headers
        const { req, ...keep } = res
        return {
          ...keep,
          req: {
            method: res.req.method,
            url: res.req.url,
            headers: keepHeaders
          }
        };
      },
    }
  }))
Siavoshkc
  • 346
  • 2
  • 16

0 Answers0