import { OnModuleDestroy } from '@nestjs/common'; import { Repository } from 'typeorm'; import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'; import { HttpLogEntity } from '../entities/http-log.entity'; /** * 异步日志配置 */ interface AsyncLogConfig { /** 批量大小 */ batchSize: number; /** 刷新间隔(毫秒) */ flushIntervalMs: number; /** 最大重试次数 */ maxRetries: number; /** 是否启用异步日志 */ enabled: boolean; } /** * HTTP日志服务 * 基于Spring Boot的请求日志记录机制,集成现有的ContextProvider * 支持异步批量日志写入以提升性能 */ export declare class HttpLoggingService implements OnModuleDestroy { private readonly logger; private logRepository; /** 日志队列 */ private logQueue; /** 定时器 */ private flushTimer?; /** 默认异步日志配置 */ private readonly asyncConfig; /** 处理中标志 */ private isProcessing; constructor(); onModuleDestroy(): void; initRepository(dataSource: string, tableName: string): Repository | null; /** * 记录请求开始 */ logRequestStart(config: AxiosRequestConfig, loggingOptions: any, requestId?: string): string; /** * 记录请求成功响应 */ logRequestSuccess(response: AxiosResponse, startTime: number, requestId: string, loggingOptions: any, databaseLogging?: boolean, retryRecords?: any[], circuitBreakerState?: string, decoratorContext?: any, clientName?: string, callingContext?: { serviceClass?: string; methodName?: string; operationName?: string; }): Promise; /** * 记录请求错误 */ logRequestError(error: AxiosError, startTime: number, requestId: string, attemptCount: number, loggingOptions: any, databaseLogging?: boolean, retryRecords?: any[], circuitBreakerState?: string, decoratorContext?: any, clientName?: string, callingContext?: { serviceClass?: string; methodName?: string; operationName?: string; }): void; /** * 查询请求日志 */ findLogs(options: { requestId?: string; userId?: string; method?: string; url?: string; statusCode?: number; success?: boolean; startDate?: Date; endDate?: Date; limit?: number; offset?: number; }): Promise; /** * 获取请求统计信息 */ getStatistics(options: { startDate?: Date; endDate?: Date; userId?: string; }): Promise; /** * 获取日志队列统计信息 */ getQueueStats(): { queueSize: number; isProcessing: boolean; config: AsyncLogConfig; }; /** * 手动刷新日志队列 */ manualFlush(): Promise; /** * 设置异步日志配置 */ setAsyncConfig(config: Partial): void; /** * 提取调用信息 */ private extractCallInfo; /** * 保存到数据库 * 如果启用异步日志,将日志项添加到队列中 * 否则同步保存到数据库 */ private saveToDatabase; /** * 启动定期刷新任务 */ private startFlushTask; /** * 刷新日志队列到数据库 */ private flush; /** * 处理单个日志项 */ private processLogItem; /** * 同步保存日志到数据库(用于异步模式内部) */ private saveLogToDatabase; /** * 获取完整URL * @param config Axios请求配置 * @returns 完整的URL字符串 */ private getFullUrl; } export {};