UNPKG

koatty_logger

Version:
424 lines (409 loc) 10.2 kB
/*! * @Author: richen * @Date: 2026-04-24 16:20:19 * @License: BSD (3-Clause) * @Copyright (c) - <richenlin(at)gmail.com> * @HomePage: https://koatty.org/ */ import { transports } from 'winston'; export declare interface BatchConfig { enabled?: boolean; maxSize?: number; flushInterval?: number; maxWaitTime?: number; } export declare const DefaultLogger: Logger; /** * Logger interface * * @export * @interface ILogger */ export declare interface ILogger { /** * log Debug * * @returns {*} * @memberof Logger */ Debug(...args: any[]): void; /** * log Info * * @returns {*} * @memberof Logger */ Info(...args: any[]): void; /** * log Warn * * @returns {*} * @memberof Logger */ Warn(...args: any[]): void; /** * log Error * * @returns {*} * @memberof Logger */ Error(...args: any[]): void; /** * log Fatal - for critical errors that cause application termination * Automatically exits the process after logging * * @returns {void} * @memberof Logger */ Fatal(...args: any[]): void; /** * log Custom * * Logger.Log('msg') * * Logger.Log('name', 'msg') * * Logger.Log('name', 'msg1', 'msg2'...) * * @param {...any[]} args * @returns {*} * @memberof Logger */ Log(...msg: any[]): void; Log(name: LogLevelType | string, ...msg: any[]): void; Log(name: LogLevelType | string, color: LogColor, ...msg: any[]): void; /** * Enable or disable logging * @param b - boolean flag */ enable(b?: boolean): void; /** * Get current log level */ getLevel(): LogLevelType; /** * Set log level * @param level - log level */ setLevel(level: LogLevelType): void; /** * Get current log file path */ getLogFilePath(): string; /** * Set log file path (with security validation) * @param f - file path */ setLogFilePath(f: string): void; /** * Get sensitive fields */ getSensFields(): Set<string>; /** * Add sensitive fields * @param fields - array of field names */ setSensFields(fields: string[]): void; /** * Clear all sensitive fields */ clearSensFields(): void; /** * Reset sensitive fields to specific list * @param fields - array of field names */ resetSensFields(fields: string[]): void; /** * Destroy logger instance and release resources */ destroy(): void; /** * Enable or disable batch writing * @param enabled - whether to enable batch writing */ enableBatch(enabled?: boolean): void; /** * Set batch writing configuration * @param config - batch configuration */ setBatchConfig(config: Partial<BatchConfig>): void; /** * Get current batch configuration */ getBatchConfig(): BatchConfig; /** * Get batch writing status */ getBatchStatus(): { enabled: boolean; bufferSize: number; maxSize?: number; timeSinceLastFlush: number; }; /** * Flush batch buffer immediately */ flushBatch(): Promise<void>; } /** * Minimal interface for property decorator manager (avoids depending on koatty_container). * Pass decoratorManager.property from koatty_container when calling registerLogDecorator. */ export declare interface IPropertyDecoratorManagerLike { registerWrapper(decoratorType: string, wrapperFunction: (originalDescriptor: PropertyDescriptor | undefined, config: any, propertyName: string, target: any) => PropertyDescriptor): void; registerDecorator(target: any, propertyKey: string | symbol, metadata: { wrapperTypes: string[]; config?: any; }, originalDescriptor?: PropertyDescriptor): PropertyDescriptor; } /** * Property decorator: inject a logger instance. * - @Log() uses the global DefaultLogger. * - @Log(options) uses a dedicated Logger instance with the given options (cached per class+property). * * Supports both legacy and TC39 field decorator calling conventions. * Requires registerLogDecorator(decoratorManager.property) to be called first; * otherwise the decorator is a no-op so existing code is not broken. * * @param options - Optional LoggerOpt for a custom Logger instance * @example * ```ts * registerLogDecorator(decoratorManager.property); * * class UserController { * \@Log() * logger: any; * * \@Log({ logLevel: 'debug' }) * debugLogger: any; * } * ``` */ export declare function Log(options?: LoggerOpt): (...args: any[]) => void | PropertyDescriptor | ((init: any) => any); export declare type LogColor = "white" | "blue" | "yellow" | "red"; export declare interface LogEntry { level: LogLevelType; name: string; args: any[]; timestamp: number; } /** * Logger * * @class Logger */ export declare class Logger implements ILogger { /** * Creates an instance of Logger. * @param {LoggerOpt} [opt] * @memberof Logger */ constructor(opt?: LoggerOpt); /** * enable */ enable(b?: boolean): void; /** * getLevel */ getLevel(): LogLevelType; /** * setLevel */ setLevel(level: LogLevelType): void; /** * getLogFilePath */ getLogFilePath(): string; /** * setLogFile */ setLogFilePath(f: string): void; /** * getSensFields */ getSensFields(): Set<string>; /** * setSensFields */ setSensFields(fields: string[]): void; /** * clearSensFields - 清理敏感字段,防止内存泄漏 */ clearSensFields(): void; /** * resetSensFields - 重置敏感字段为指定列表 */ resetSensFields(fields: string[]): void; /** * destroy - 销毁Logger实例,释放资源 */ destroy(): void; /** * enableBatch - 启用/禁用批量写入 */ enableBatch(enabled?: boolean): void; /** * setBatchConfig - 设置批量写入配置 */ setBatchConfig(config: Partial<BatchConfig>): void; /** * getBatchConfig - 获取批量写入配置 */ getBatchConfig(): BatchConfig; /** * getBatchStatus - 获取批量写入状态 */ getBatchStatus(): { enabled: boolean; bufferSize: number; maxSize: number; timeSinceLastFlush: number; }; /** * flushBatch - 立即刷新批量写入缓冲区 */ flushBatch(): Promise<void>; /** * startBatchTimer - 启动批量写入定时器 */ /** * stopBatchTimer - 停止批量写入定时器 */ /** * addToBuffer - 添加日志到缓冲区 */ /** * writeLogEntry - 写入单个日志条目 */ /** * sanitizeInput - 过滤危险字符,防止日志注入 */ /** * validateLogPath - 验证日志路径安全性 */ /** * log Debug * * @returns {*} * @memberof Logger */ Debug(...args: any[]): void; /** * debug */ debug(...args: any[]): void; /** * log Info * * @returns {*} * @memberof Logger */ Info(...args: any[]): void; /** * info */ info(...args: any[]): void; /** * log Warn * * @returns {*} * @memberof Logger */ Warn(...args: any[]): void; /** * warn */ warn(...args: any[]): void; /** * log Error * * @returns {*} * @memberof Logger */ Error(...args: any[]): void; /** * error */ error(...args: any[]): void; /** * log Fatal - for critical errors that cause application termination * Automatically exits the process after logging * * @returns {*} * @memberof Logger */ Fatal(...args: any[]): void; /** * fatal */ fatal(...args: any[]): void; /** * log Log * * Logger.Log('msg') * * Logger.Log('name', 'msg') * * Logger.Log('name', 'msg1', 'msg2'...) * * @param {...any[]} args * @returns {*} * @memberof Logger */ Log(name: LogLevelType | string, ...args: any[]): void; /** * log */ log(name: LogLevelType | string, ...args: any[]): void; /** * print console * * @private * @param {LogLevelType} level * @param {string} name * @param {any[]|string} args * @memberof Logger */ /** * writeLogAsync - 异步写入单个日志条目 */ /** * 格式化 * * @private * @param {string} level * @param {string} label * @param {string} timestamp * @param {any[]|string} args * @returns {string} * @memberof Logger */ /** * createLogger * @returns */ } export declare interface LoggerOpt { logLevel?: LogLevelType; logFilePath?: string; sensFields?: Set<string>; batchConfig?: BatchConfig; } export declare type LogLevelType = "debug" | "info" | "warn" | "error"; export declare interface LogTrans { Console?: transports.ConsoleTransportInstance; File?: any; } /** * Register the "Log" decorator with koatty-container's property manager. * Call once at app startup, e.g. registerLogDecorator(decoratorManager.property). * * @param propertyManager - PropertyDecoratorManager from decoratorManager.property */ export declare function registerLogDecorator(propertyManager: IPropertyDecoratorManagerLike): void; /** * Unregister the stored property manager (e.g. for tests). */ export declare function unregisterLogDecorator(): void; export { }