Files
spaceflow/core/src/shared/verbose/index.ts
2026-02-15 22:02:21 +08:00

74 lines
2.3 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* 日志级别(字符串模式)
* - "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<LogLevel, number> = {
silent: 0,
info: 1,
verbose: 2,
debug: 3,
} as const;
/** VerboseLevel 数字到 LogLevel 字符串的映射 */
const VERBOSE_TO_LOG_LEVEL: Record<number, LogLevel> = {
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;
}