logs-interceptor-node14
Version:
High-performance, production-ready log interceptor for Node.js 14 applications with Loki integration
221 lines • 6.59 kB
TypeScript
export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'fatal';
export type CircuitBreakerStateType = 'closed' | 'open' | 'half-open';
export interface LogEntry {
id: string;
timestamp: string;
level: LogLevel;
message: string;
context?: Record<string, unknown>;
traceId?: string;
spanId?: string;
requestId?: string;
labels?: Record<string, string>;
metadata?: {
memoryUsage?: number;
cpuUsage?: number;
};
}
export interface LokiStream {
stream: Record<string, string>;
values: [string, string][];
}
export interface LokiPayload {
streams: LokiStream[];
}
export interface TransportOptions {
url: string;
tenantId: string;
authToken?: string;
timeout?: number;
maxRetries?: number;
retryDelay?: number;
compression?: boolean;
}
export interface ResolvedTransportOptions {
url: string;
tenantId: string;
authToken: string;
timeout: number;
maxRetries: number;
retryDelay: number;
compression: boolean;
}
export interface BufferOptions {
maxSize?: number;
flushInterval?: number;
maxAge?: number;
autoFlush?: boolean;
maxMemoryMB?: number;
}
export interface ResolvedBufferOptions {
maxSize: number;
flushInterval: number;
maxAge: number;
autoFlush: boolean;
maxMemoryMB: number;
}
export interface FilterOptions {
levels?: LogLevel[];
patterns?: RegExp[];
samplingRate?: number;
maxMessageLength?: number;
sanitize?: boolean;
sensitivePatterns?: RegExp[];
}
export interface ResolvedFilterOptions {
levels: LogLevel[];
patterns: RegExp[];
samplingRate: number;
maxMessageLength: number;
sanitize: boolean;
sensitivePatterns: RegExp[];
}
export interface CircuitBreakerOptions {
enabled?: boolean;
failureThreshold?: number;
resetTimeout?: number;
halfOpenRequests?: number;
}
export interface ResolvedCircuitBreakerOptions {
enabled: boolean;
failureThreshold: number;
resetTimeout: number;
halfOpenRequests: number;
}
export interface CircuitBreakerState {
state: CircuitBreakerStateType;
failures: number;
successCount: number;
lastFailure: number;
nextAttempt: number;
}
export interface IntegrationsOptions {
winston?: boolean | WinstonIntegrationConfig;
pino?: boolean | PinoIntegrationConfig;
morgan?: boolean | MorganIntegrationConfig;
bunyan?: boolean | BunyanIntegrationConfig;
}
export interface WinstonIntegrationConfig {
enabled: boolean;
levels?: Record<string, LogLevel>;
}
export interface PinoIntegrationConfig {
enabled: boolean;
messageKey?: string;
levelKey?: string;
}
export interface MorganIntegrationConfig {
enabled: boolean;
format?: string;
}
export interface BunyanIntegrationConfig {
enabled: boolean;
streams?: any[];
}
export interface PerformanceOptions {
useWorkers?: boolean;
maxConcurrentFlushes?: number;
compressionLevel?: number;
}
export interface ResolvedPerformanceOptions {
useWorkers: boolean;
maxConcurrentFlushes: number;
compressionLevel: number;
}
export interface LogsInterceptorConfig {
transport: TransportOptions;
appName: string;
version?: string;
environment?: string;
labels?: Record<string, string>;
dynamicLabels?: Record<string, () => string | number>;
buffer?: BufferOptions;
filter?: FilterOptions;
circuitBreaker?: CircuitBreakerOptions;
integrations?: IntegrationsOptions;
performance?: PerformanceOptions;
enableMetrics?: boolean;
enableHealthCheck?: boolean;
interceptConsole?: boolean;
preserveOriginalConsole?: boolean;
debug?: boolean;
silentErrors?: boolean;
}
export interface ResolvedLogsInterceptorConfig {
transport: ResolvedTransportOptions;
appName: string;
version: string;
environment: string;
labels: Record<string, string>;
dynamicLabels: Record<string, () => string | number>;
buffer: ResolvedBufferOptions;
filter: ResolvedFilterOptions;
circuitBreaker: ResolvedCircuitBreakerOptions;
integrations: IntegrationsOptions;
performance: ResolvedPerformanceOptions;
enableMetrics: boolean;
enableHealthCheck: boolean;
interceptConsole: boolean;
preserveOriginalConsole: boolean;
debug: boolean;
silentErrors: boolean;
}
export interface LoggerMetrics {
logsProcessed: number;
logsDropped: number;
logsSanitized: number;
flushCount: number;
errorCount: number;
bufferSize: number;
avgFlushTime: number;
lastFlushTime: number;
memoryUsage: number;
cpuUsage: number;
circuitBreakerTrips: number;
}
export interface HealthStatus {
healthy: boolean;
lastSuccessfulFlush: number;
consecutiveErrors: number;
bufferUtilization: number;
uptime: number;
memoryUsageMB: number;
circuitBreakerState: CircuitBreakerStateType;
}
export interface LoggerInstance {
log(level: LogLevel, message: string, context?: Record<string, unknown>): 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, any>, fn: () => T): T;
runWithContextAsync<T>(context: Record<string, any>, fn: () => Promise<T>): Promise<T>;
getMetrics(): LoggerMetrics;
getHealth(): HealthStatus;
getWinstonTransport(): any;
getPinoStream(): any;
getMorganStream(): any;
destroy(): Promise<void>;
}
export interface EnvironmentConfig {
LOGS_INTERCEPTOR_URL?: string;
LOGS_INTERCEPTOR_TENANT_ID?: string;
LOGS_INTERCEPTOR_AUTH_TOKEN?: string;
LOGS_INTERCEPTOR_APP_NAME?: string;
LOGS_INTERCEPTOR_ENVIRONMENT?: string;
LOGS_INTERCEPTOR_VERSION?: string;
LOGS_INTERCEPTOR_LABELS?: string;
LOGS_INTERCEPTOR_BUFFER_SIZE?: string;
LOGS_INTERCEPTOR_FLUSH_INTERVAL?: string;
LOGS_INTERCEPTOR_LOG_LEVEL?: string;
LOGS_INTERCEPTOR_ENABLED?: string;
LOGS_INTERCEPTOR_DEBUG?: string;
LOGS_INTERCEPTOR_SAMPLING_RATE?: string;
LOGS_INTERCEPTOR_CIRCUIT_BREAKER?: string;
LOGS_INTERCEPTOR_SANITIZE?: string;
LOGS_INTERCEPTOR_MAX_MEMORY_MB?: string;
}
//# sourceMappingURL=types.d.ts.map