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;
