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.
55 lines • 2.38 kB
TypeScript
/// <reference types="node" />
/**
* Presentation: Logger
* Public API for the logs interceptor
*/
import { EventEmitter } from 'events';
import { LogLevel } from '../domain/entities/LogEntry';
import { CreateLogEntryUseCase } from '../application/use-cases/CreateLogEntryUseCase';
import { ILogRepository } from '../domain/repositories/ILogRepository';
import { IContextService } from '../domain/services/IContextService';
export interface LoggerMetrics {
readonly logsProcessed: number;
readonly logsDropped: number;
readonly logsSanitized: number;
readonly flushCount: number;
readonly errorCount: number;
readonly bufferSize: number;
readonly avgFlushTime: number;
readonly lastFlushTime: number;
readonly memoryUsage: number;
readonly cpuUsage: number;
readonly circuitBreakerTrips: number;
}
export interface HealthStatus {
readonly healthy: boolean;
readonly lastSuccessfulFlush?: number;
readonly consecutiveErrors: number;
readonly bufferUtilization: number;
readonly uptime: number;
readonly memoryUsageMB: number;
readonly circuitBreakerState: 'closed' | 'open' | 'half-open';
}
export declare class Logger extends EventEmitter {
private readonly createLogEntryUseCase;
private readonly logRepository;
private readonly contextService;
private metrics;
private startTime;
private isDestroyed;
constructor(createLogEntryUseCase: CreateLogEntryUseCase, logRepository: ILogRepository, contextService: IContextService);
log(level: LogLevel, message: string, context?: Record<string, unknown>): Promise<void>;
debug(message: string, context?: Record<string, unknown>): void;
info(message: string, context?: Record<string, unknown>): void;
warn(message: string, context?: Record<string, unknown>): void;
error(message: string, context?: Record<string, unknown>): void;
fatal(message: string, context?: Record<string, unknown>): void;
trackEvent(eventName: string, properties?: Record<string, unknown>): void;
flush(): Promise<void>;
runWithContext<T>(context: Record<string, unknown>, fn: () => T): T;
runWithContextAsync<T>(context: Record<string, unknown>, fn: () => Promise<T>): Promise<T>;
getMetrics(): LoggerMetrics;
getHealth(): Promise<HealthStatus>;
destroy(): Promise<void>;
}
//# sourceMappingURL=Logger.d.ts.map