@cmtlyt/logger
Version:
63 lines (62 loc) • 2.51 kB
TypeScript
import type { Logger, LoggerOptions } from './types';
/**
* 创建一个 Logger 实例
*
* Logger 使用 Proxy 代理实现动态属性访问,任何属性都会返回对应的日志函数。
* 支持嵌套调用检测和深度控制,防止无限递归和栈溢出。
*
* @template T Transform 函数返回的数据类型
* @param options Logger 配置选项
* @param options.enableOutput 是否启用日志输出,默认为true,设置为false时仍执行transform和report但不输出
* @param options.transform 数据转换函数,用于处理原始日志数据
* @param options.report 数据上报函数,用于处理转换后的数据
* @param options.maxNestingDepth 最大嵌套深度,默认为3,主调用不计入深度
* @param options.outputAdapters 输出适配器数组,用于处理不同类型的日志输出
* @returns Logger 实例,支持任意属性的日志函数调用
*
* @example
* ```typescript
* // 基础用法
* const logger = createLogger();
* logger.info('Hello', 'World');
* logger.debug('Debug message');
* logger.customType('Custom log type');
*
* // 禁用日志输出但保留数据处理
* const disabledOutputLogger = createLogger({ enableOutput: false });
* disabledOutputLogger.info('这条日志不会输出但transform和report仍会执行');
*
* // 使用函数动态控制输出
* const conditionalLogger = createLogger({
* enableOutput: ({ type, data }) => {
* // 只在生产环境输出error级别的日志
* return process.env.NODE_ENV === 'production' ? type === 'error' : true;
* },
* transform: ({ type, messages }) => ({ type, messages, timestamp: Date.now() })
* });
*
* // 带配置的用法
* const logger = createLogger({
* enableOutput: true,
* transform: ({ type, messages, isNestingCall }) => {
* return { type, messages, timestamp: Date.now(), isNesting: isNestingCall };
* },
* report: ({ type, messages, data }) => {
* console.log('Report:', { type, messages, data });
* },
* maxNestingDepth: 5,
* outputAdapters: [webConsoleAdapter()]
* });
*
* // 嵌套调用示例
* const logger = createLogger({
* transform: ({ type, messages, isNestingCall }) => {
* if (type === 'trigger' && !isNestingCall) {
* logger.nested('这是嵌套调用'); // 会被标记为 isNestingCall: true
* }
* return { type, messages, isNestingCall };
* }
* });
* ```
*/
export declare function createLogger<T>(options?: LoggerOptions<T>): Logger;