import type { P } from 'pino'; import { getPino } from './getPino'; import { logLevel, LogLevelSetting } from './logLevel'; const getLevel = (level: LogLevelSetting): string => { switch (level) { case '0': return 'warn'; case '1': return 'info'; case '2': return 'debug'; default: return 'warn'; } }; export class Logger { readonly logger: P.Logger; constructor(loggerLabel: string) { this.logger = getPino(loggerLabel); logLevel.on('changed', (level) => { this.logger.level = getLevel(level); }); } section(name: string): P.Logger { const child = this.logger.child({ section: name }); logLevel.on('changed', (level) => { child.level = getLevel(level); }); return child; } level(newLevel: string): void { this.logger.level = newLevel; } log(obj: T, ...args: any[]): void; log(msg: string, ...args: any[]): void; log(msg: string, ...args: any[]): void { this.logger.info(msg, ...args); } debug(obj: T, ...args: any[]): void; debug(msg: string, ...args: any[]): void; debug(msg: string, ...args: any[]): void { this.logger.debug(msg, ...args); } info(obj: T, ...args: any[]): void; info(msg: string, ...args: any[]): void; info(msg: string, ...args: any[]): void { this.logger.info(msg, ...args); } success(obj: T, ...args: any[]): void; success(msg: string, ...args: any[]): void; success(msg: string, ...args: any[]): void { this.logger.info(msg, ...args); } warn(obj: T, ...args: any[]): void; warn(msg: string, ...args: any[]): void; warn(msg: string, ...args: any[]): void { this.logger.warn(msg, ...args); } error(obj: T, ...args: any[]): void; error(msg: string, ...args: any[]): void; error(msg: string, ...args: any[]): void { this.logger.error(msg, ...args); } method(obj: T, ...args: any[]): void; method(msg: string, ...args: any[]): void; method(msg: string, ...args: any[]): void { this.logger.method(msg, ...args); } subscription(obj: T, ...args: any[]): void; subscription(msg: string, ...args: any[]): void; subscription(msg: string, ...args: any[]): void { this.logger.subscription(msg, ...args); } }