.agents/skills/system/pr-review/style/logger.md
FastGPT 后端统一使用 @fastgpt/service/common/logger。日志需要可检索、可聚合、可回放,且避免敏感信息泄露。
审查要点:
@fastgpt/service/common/logger,避免 console.logconfigureLogger()getLogger(LogCategories.XXX) 指定分类示例:
import { configureLogger, getLogger, LogCategories } from '@fastgpt/service/common/logger';
await configureLogger();
const logger = getLogger(LogCategories.SYSTEM);
logger.info('System initialized successfully');
审查要点:
SYSTEM 用于系统级初始化与全局状态INFRA.* 用于数据库/缓存/队列/存储等HTTP.* 用于请求、响应、请求错误MODULE.* 用于业务模块(参考 pages/api 路径)packages/service/common/logger/categories.ts问题示例:
// ❌ 不规范:自定义字符串分类
const logger = getLogger(['custom', 'random']);
审查要点:
JSON.stringify 拼接到消息里示例:
// ✅ 推荐
logger.info('Vector queue task finished', { taskId, durationMs, count });
// ❌ 不推荐
logger.info(`Task finished: ${JSON.stringify({ taskId, durationMs, count })}`);
审查要点:
error 字段记录 Error 对象,保留堆栈示例:
try {
await doSomething();
} catch (error) {
logger.error('Do something failed', { error, teamId, datasetId });
throw error;
}
审查要点:
info 用于阶段开始/完成warn 用于可恢复异常error 用于失败或影响流程的异常debug/trace示例:
logger.info('Training started', { datasetId });
logger.debug('Training progress', { datasetId, step, total });
logger.warn('Retrying batch', { batchId, retryLeft });
logger.error('Training failed', { datasetId, error });
审查要点:
requestId,优先使用 withContextjobId/queueName示例:
return withContext({ requestId }, async () => {
logger.info('Request received', { requestId, method, url });
});
审查要点:
fastgpt 属性示例:
logger.warn('Payload truncated for debug', {
fastgpt: true,
payloadPreview: payload.slice(0, 200)
});