You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

84 lines
2.3 KiB

/**
* AI 调试打印。统一前缀 `[AI操作]`,控制台可过滤。
* 默认全关;控制台 `setAiLogVerbose(true)` 后 `aiLog` / `aiOp` / `aiWarn` 才输出。
*/
/** 所有 AI 日志统一前缀(控制台过滤用) */
export const AI_LOG_PREFIX = '[AI操作]';
let _verbose = false;
/**
* 开关 AI 细节 console 打印。
* @param enabled 是否开启
*/
export function setAiLogVerbose(enabled: boolean): void {
_verbose = !!enabled;
}
/** 当前是否开启 AI 细节打印 */
export function isAiLogVerbose(): boolean {
return _verbose;
}
/**
* 给首参加上统一前缀。
* @param args 原始参数
*/
function _withPrefix(args: unknown[]): unknown[] {
if (args.length <= 0) return [AI_LOG_PREFIX];
const head = args[0];
const rest: unknown[] = [];
for (let i = 1; i < args.length; i++) {
const a = args[i];
if (a !== null && typeof a === 'object') continue;
rest.push(a);
}
if (typeof head === 'string') {
if (head.indexOf(AI_LOG_PREFIX) === 0) {
const out: unknown[] = [head];
for (let i = 0; i < rest.length; i++) out.push(rest[i]);
return out;
}
const out: unknown[] = [`${AI_LOG_PREFIX} ${head}`];
for (let i = 0; i < rest.length; i++) out.push(rest[i]);
return out;
}
const out: unknown[] = [AI_LOG_PREFIX];
if (head !== null && typeof head !== 'object') out.push(head);
for (let i = 0; i < rest.length; i++) out.push(rest[i]);
return out;
}
/**
* AI 细节日志;关闭时为空操作。
* @param args 打印参数
*/
export function aiLog(...args: unknown[]): void {
if (!_verbose) return;
console.log(..._withPrefix(args));
}
/**
* AI 操作链日志(摆放/取舍/合成等);关闭时为空操作。
* @param args 打印参数
*/
export function aiOp(...args: unknown[]): void {
if (!_verbose) return;
console.log(..._withPrefix(args));
}
/**
* AI 告警;关闭时为空操作(用 log 避免浏览器 warn 刷屏卡顿)。
* @param args 打印参数
*/
export function aiWarn(...args: unknown[]): void {
if (!_verbose) return;
console.log(..._withPrefix(args));
}
try {
(globalThis as { setAiLogVerbose?: typeof setAiLogVerbose }).setAiLogVerbose = setAiLogVerbose;
} catch {
/* ignore */
}