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(options?: LoggerOptions): Logger;