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    
@doodle/logger / middleware.js
Size: Mime:
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

/**
 * Middleware for express. Logs requests and errors.
 */
const TracingHeader = {
  trace: 'X-B3-TraceId',
  span: 'X-B3-SpanId',
  parent: 'X-B3-ParentSpanId',
  exportable: 'X-Span-Export'
};
/**
 * @param {Request} req The express request object
 */

function extractHeaderProperties(req) {
  const headerProps = {
    trace: req.get(TracingHeader.trace),
    span: req.get(TracingHeader.span),
    parent: req.get(TracingHeader.parent),
    exportable: req.get(TracingHeader.exportable)
  };
  return _objectSpread({}, headerProps);
}

const LoggerMiddleware = {
  /**
   *
   * @param {*} req
   * @param {*} res
   * @param {*} next
   */
  expressLogger(req, res, next) {
    const {
      logger
    } = req.app.locals;

    if (res.finished) {
      logger.debug(`Request handled`, _objectSpread({}, extractHeaderProperties(req), {
        reqUrl: req.originalUrl,
        resStatusCode: `${res.statusCode}`
      }));
    } else {
      // Express sends a 404 if the response was not yet sent at the end of the middleware chain
      // See https://expressjs.com/en/starter/faq.html#how-do-i-handle-404-responses
      logger.debug(`Requested unhandled resource`, _objectSpread({}, extractHeaderProperties(req), {
        reqUrl: req.originalUrl,
        resStatusCode: `404`
      }));
    }

    next();
  },

  /**
   *
   * @param {*} err
   * @param {*} req
   * @param {*} res
   * @param {*} next
   */
  expressErrorLogger(err, req, res, next) {
    const {
      logger
    } = req.app.locals;

    if (!res.finished) {
      res.status(500).json({
        errorMessage: 'The server could not process the request.'
      });
    }

    logger.error(`Error handling request:\n${err.stack}`, _objectSpread({}, extractHeaderProperties(req), {
      reqUrl: req.originalUrl,
      resStatusCode: `${res.statusCode}`
    }));
    next(err);
  },

  initialize(app, logger) {
    app.locals.logger = logger;
  }

};
module.exports = LoggerMiddleware;