nestjs-universal-logger-v2
Version:
Universal logging package for NestJS - Automatic system-wide logging with per-service MongoDB collections and TTL-based cleanup
186 lines (185 loc) • 4.77 kB
TypeScript
export interface UniversalLoggerConfig {
mongodb?: {
uri?: string;
host?: string;
port?: number;
database?: string;
username?: string;
password?: string;
options?: {
useNewUrlParser?: boolean;
useUnifiedTopology?: boolean;
maxPoolSize?: number;
serverSelectionTimeoutMS?: number;
socketTimeoutMS?: number;
};
};
logging?: {
level?: 'error' | 'warn' | 'info' | 'debug' | 'verbose';
serviceName?: string;
environment?: string;
version?: string;
enableConsole?: boolean;
enableFile?: boolean;
logDirectory?: string;
maxFileSize?: number;
maxFiles?: number;
};
api?: {
enabled?: boolean;
logRequests?: boolean;
logResponses?: boolean;
logHeaders?: boolean;
logBody?: boolean;
logQuery?: boolean;
sensitiveHeaders?: string[];
excludePaths?: string[];
includePaths?: string[];
maxBodySize?: number;
slowRequestThreshold?: number;
};
performance?: {
enabled?: boolean;
trackDatabaseQueries?: boolean;
trackExternalCalls?: boolean;
trackMemoryUsage?: boolean;
trackCPUUsage?: boolean;
};
security?: {
enabled?: boolean;
trackAuthEvents?: boolean;
trackFailedLogins?: boolean;
trackSuspiciousActivity?: boolean;
ipWhitelist?: string[];
ipBlacklist?: string[];
};
business?: {
enabled?: boolean;
trackUserActions?: boolean;
trackFeatureUsage?: boolean;
trackConversions?: boolean;
customEvents?: string[];
};
dashboard?: {
enabled?: boolean;
port?: number;
host?: string;
auth?: {
enabled?: boolean;
username?: string;
password?: string;
};
};
retention?: {
enabled?: boolean;
daysToKeep?: number;
maxSizeGB?: number;
archiveOldLogs?: boolean;
archivePath?: string;
};
ttl?: {
enabled?: boolean;
expireAfterSeconds?: number;
indexField?: 'timestamp' | 'created_at' | 'updated_at';
};
export?: {
enabled?: boolean;
formats?: ('json' | 'csv' | 'excel')[];
maxExportSize?: number;
exportPath?: string;
};
alerts?: {
enabled?: boolean;
errorRateThreshold?: number;
responseTimeThreshold?: number;
memoryUsageThreshold?: number;
webhookUrl?: string;
email?: {
enabled?: boolean;
smtp?: {
host?: string;
port?: number;
secure?: boolean;
auth?: {
user?: string;
pass?: string;
};
};
recipients?: string[];
};
};
}
export interface LogEntry {
id: string;
timestamp: Date;
level: 'error' | 'warn' | 'info' | 'debug' | 'verbose';
service: string;
module?: string;
method?: string;
message: string;
trace?: string;
metadata?: Record<string, any>;
userId?: string;
sessionId?: string;
requestId?: string;
ip?: string;
userAgent?: string;
duration?: number;
statusCode?: number;
errorCode?: string;
tags?: string[];
severity?: 'low' | 'medium' | 'high' | 'critical';
environment?: string;
version?: string;
apiCall?: {
method?: string;
path?: string;
query?: Record<string, any>;
body?: any;
headers?: Record<string, any>;
response?: {
statusCode?: number;
body?: any;
headers?: Record<string, any>;
};
};
performance?: {
memoryUsage?: {
heapUsed?: number;
heapTotal?: number;
external?: number;
rss?: number;
};
cpuUsage?: {
user?: number;
system?: number;
};
databaseQueries?: Array<{
query?: string;
duration?: number;
table?: string;
operation?: string;
}>;
externalCalls?: Array<{
url?: string;
method?: string;
duration?: number;
statusCode?: number;
}>;
};
}
export interface LogQuery {
service?: string;
level?: string;
startDate?: Date;
endDate?: Date;
userId?: string;
requestId?: string;
tags?: string[];
severity?: string;
limit?: number;
skip?: number;
path?: string;
method?: string;
statusCode?: number;
}