/** * 日志级别(字符串模式) * - "silent": 静默模式,不输出任何日志 * - "info": 显示过程日志(如 "开始审查"、"完成审查") * - "verbose": 显示详细日志 * - "debug": 显示调试日志(包括大模型的输入提示词和输出过程) */ export type LogLevel = "silent" | "info" | "verbose" | "debug"; /** * Verbose 日志级别(数字模式,向后兼容) * - 0 / false: 静默模式,只返回结果 * - 1 / true: 显示过程日志 * - 2: 显示详细日志 * - 3: 显示调试日志 */ export type VerboseLevel = 0 | 1 | 2 | 3 | false | true; /** 日志级别优先级映射 */ export const LOG_LEVEL_PRIORITY: Record = { silent: 0, info: 1, verbose: 2, debug: 3, } as const; /** VerboseLevel 数字到 LogLevel 字符串的映射 */ const VERBOSE_TO_LOG_LEVEL: Record = { 0: "silent", 1: "info", 2: "verbose", 3: "debug", } as const; /** * 将任意级别值统一转为 LogLevel 字符串 * @param level 日志级别(字符串、数字、布尔值) * @returns LogLevel 字符串 */ export const toLogLevel = (level: LogLevel | VerboseLevel | undefined): LogLevel => { if (level === undefined) return "info"; if (typeof level === "string") return level; if (level === true) return "info"; if (level === false) return "silent"; return VERBOSE_TO_LOG_LEVEL[level] ?? "info"; }; /** * 将 verbose 值规范化为数字 * @param verbose verbose 值(支持字符串、数字、布尔值) * @returns 规范化后的数字 (0, 1, 2, 3) */ export function normalizeVerbose( verbose: LogLevel | VerboseLevel | boolean | undefined, ): 0 | 1 | 2 | 3 { if (verbose === undefined || verbose === false || verbose === 0 || verbose === "silent") return 0; if (verbose === true || verbose === 1 || verbose === "info") return 1; if (verbose === 2 || verbose === "verbose") return 2; return 3; } /** * 判断是否应该打印指定级别的日志 * @param verbose 当前 verbose 级别(支持字符串或数字) * @param requiredLevel 需要的最低级别 (1, 2, 3) * @returns 是否应该打印 */ export function shouldLog( verbose: LogLevel | VerboseLevel | undefined, requiredLevel: 1 | 2 | 3, ): boolean { return normalizeVerbose(verbose) >= requiredLevel; }