Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@skava/logger / src / logDecoratorMiddleware.ts
Size: Mime:
import { isFunction } from 'exotic'
import { Logger } from 'pino'
import { NextFunction, ExpressResponse, ExpressRequest } from './typings'

export type LogMiddlewareOptionsType = { logger: Logger }

export function logDecoratorMiddleware(options: LogMiddlewareOptionsType) {
  const { logger } = options
  return function (req: ExpressRequest, res: ExpressResponse, next?: NextFunction) {
    function logFor(level: 'info' | 'debug' | 'error' | 'warn' | 'trace' | 'fatal') {
      return (message?: string | any, ...args: any[]) => {
        if (typeof message === 'string') {
          logger.info(message, { meta: (req as any).meta }, ...args)
        } else if (typeof message === 'object') {
          logger.info({ meta: req.meta, ...message })
        }
      }
    }
    const log = {
      info: logFor('info'),
      debug: logFor('debug'),
      error: logFor('error'),
      warn: logFor('warn'),
      trace: logFor('trace'),
      fatal: logFor('fatal'),
    }

    req.log = log

    if (isFunction(next) === true) {
      next()
    }
  }
}