nestjs-context-winston
Version:
Contextual Logger for nestjs apps using AsyncLocalStorage and winston
62 lines • 3.04 kB
JavaScript
;
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