UNPKG

nestjs-context-winston

Version:

Contextual Logger for nestjs apps using AsyncLocalStorage and winston

62 lines 3.04 kB
"use strict"; var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) { var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; return c > 3 && r && Object.defineProperty(target, key, r), r; }; var __metadata = (this && this.__metadata) || function (k, v) { if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v); }; var NestJsContextLoggerMiddleware_1; Object.defineProperty(exports, "__esModule", { value: true }); exports.NestJsContextLoggerMiddleware = void 0; const common_1 = require("@nestjs/common"); const perf_hooks_1 = require("perf_hooks"); const internal_1 = require("./internal"); const base_context_logger_1 = require("./base-context-logger"); const start_context_1 = require("./start-context"); let NestJsContextLoggerMiddleware = class NestJsContextLoggerMiddleware { static { NestJsContextLoggerMiddleware_1 = this; } logger; options; static REQUEST_LOG = process.env.AUTO_REQUEST_LOG !== 'false'; missingOnceLogged = false; constructor(logger, options) { this.logger = logger; this.options = options; } use(req, res, next) { const raw = 'raw' in res ? res.raw : res; if (!raw.once) { if (!this.missingOnceLogged) { this.missingOnceLogged = true; this.logger.warn('Response object does not have "once" method. Cannot attach finish listener for logging.'); } return next(); } if (!NestJsContextLoggerMiddleware_1.REQUEST_LOG) return next(); const start = perf_hooks_1.performance.now(); (0, start_context_1.startContext)('NestJsContextLoggerMiddleware.use'); const ctx = (0, internal_1.getLogExecutionMeta)(); if (ctx) ctx.usingMiddleware = true; const cleanup = () => { try { (0, internal_1.logHttpResponse)(start, this.logger, this.options, req, res); } catch (error) { this.logger.error(`Error in middleware logging: ${error && typeof error === 'object' && 'message' in error ? error.message : error}`); } }; raw.once('finish', cleanup); next(); } }; exports.NestJsContextLoggerMiddleware = NestJsContextLoggerMiddleware; exports.NestJsContextLoggerMiddleware = NestJsContextLoggerMiddleware = NestJsContextLoggerMiddleware_1 = __decorate([ (0, common_1.Injectable)(), __metadata("design:paramtypes", [base_context_logger_1.BaseContextLogger, Object]) ], NestJsContextLoggerMiddleware); //# sourceMappingURL=nestjs-context-logger.middleware.js.map