logs-interceptor
Version:
High-performance, production-ready log interceptor for Node.js applications with Loki integration. Built with Clean Architecture principles. Supports Node.js, Browser, and Node-RED.
49 lines • 1.77 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateLogEntryUseCase = void 0;
class CreateLogEntryUseCase {
constructor(logRepository, filterService, contextService) {
this.logRepository = logRepository;
this.filterService = filterService;
this.contextService = contextService;
}
async execute(input) {
// Check if log should be processed
if (!this.filterService.shouldProcess(input.level, input.message, input.context)) {
return;
}
// Create log entry
const entry = this.createLogEntry(input);
// Sanitize sensitive data
const sanitizedEntry = this.filterService.sanitize(entry);
// Save to repository
await this.logRepository.save(sanitizedEntry);
}
createLogEntry(input) {
const context = this.contextService.getContext();
const dynamicLabels = this.contextService.getDynamicLabels();
return {
id: this.generateId(),
timestamp: new Date().toISOString(),
level: input.level,
message: input.message,
context: {
...context,
...input.context,
},
traceId: dynamicLabels.trace_id,
spanId: dynamicLabels.span_id,
requestId: dynamicLabels.request_id,
labels: {
level: input.level,
...dynamicLabels,
},
metadata: this.contextService.getMetadata(),
};
}
generateId() {
return `${Date.now()}-${Math.random().toString(36).substring(2, 9)}`;
}
}
exports.CreateLogEntryUseCase = CreateLogEntryUseCase;
//# sourceMappingURL=CreateLogEntryUseCase.js.map