@cardql/node
Version:
CardQL SDK for Node.js and serverless applications
81 lines (64 loc) • 1.8 kB
text/typescript
export type LogLevel = "error" | "warn" | "info" | "debug";
export interface LogEntry {
level: LogLevel;
message: string;
timestamp: string;
metadata?: any;
}
export class Logger {
private enabled: boolean;
private level: LogLevel;
constructor(enabled = false, level: LogLevel = "info") {
this.enabled = enabled;
this.level = level;
}
private shouldLog(level: LogLevel): boolean {
if (!this.enabled) return false;
const levels: Record<LogLevel, number> = {
error: 0,
warn: 1,
info: 2,
debug: 3,
};
return levels[level] <= levels[this.level];
}
private formatMessage(
level: LogLevel,
message: string,
metadata?: any
): string {
const timestamp = new Date().toISOString();
const prefix = `[${timestamp}] [${level.toUpperCase()}] [CardQL]`;
if (metadata) {
return `${prefix} ${message} ${JSON.stringify(metadata)}`;
}
return `${prefix} ${message}`;
}
error(message: string, metadata?: any): void {
if (this.shouldLog("error")) {
console.error(this.formatMessage("error", message, metadata));
}
}
warn(message: string, metadata?: any): void {
if (this.shouldLog("warn")) {
console.warn(this.formatMessage("warn", message, metadata));
}
}
info(message: string, metadata?: any): void {
if (this.shouldLog("info")) {
console.info(this.formatMessage("info", message, metadata));
}
}
debug(message: string, metadata?: any): void {
if (this.shouldLog("debug")) {
console.debug(this.formatMessage("debug", message, metadata));
}
}
setEnabled(enabled: boolean): void {
this.enabled = enabled;
}
setLevel(level: LogLevel): void {
this.level = level;
}
}
export const defaultLogger = new Logger();