柯里化日志前缀工具通过 createLogger(prefix) 返回记忆前缀的新函数,支持单消息、多参数及链式组合前缀,如 baseLog.with('API').with('User') 生成分层日志标识。

用柯里化编写日志前缀工具,核心是让 log 函数能“记住”前缀,并返回一个新函数,调用时自动拼接前缀和实际消息。
理解柯里化的关键点
柯里化不是一次性传入所有参数,而是把多参数函数拆成多个单参数函数,每次调用返回下一个函数,直到参数收齐。日志前缀场景中,我们希望:
- 第一次调用传入前缀(如
"[API]"),返回一个带记忆能力的新log函数 - 后续调用只传消息内容,自动加上之前记下的前缀
- 不污染全局
console.log,保持原生行为(如支持多个参数、格式化)
基础实现:单前缀 + 单消息
最简版本,适用于字符串消息:
const createLogger = (prefix) => {
return (message) => {
console.log(`${prefix} ${message}`);
};
};
const apiLog = createLogger('[API]');
apiLog('request sent'); // → "[API] request sent"
apiLog('response received'); // → "[API] response received"
增强版:支持多参数和原生 console.log 行为
真实开发中,日志常需传多个参数(如 console.log('user:', user, 'status:', 200))。可借助 console.log.apply 或展开运算符保留原行为:
立即学习“Java免费学习笔记(深入)”;
const createLogger = (prefix) => {
return (...args) => {
console.log(prefix, ...args);
};
};
const dbLog = createLogger('[DB]');
dbLog('query executed', { id: 123 }, 'in', 42, 'ms');
// → "[DB]" "query executed" {id: 123} "in" 42 "ms"
注意:这里 prefix 单独作为第一个参数传给 console.log,它会自然按空格分隔显示,且不影响样式、对象展开、颜色等原生特性。
进阶用法:链式前缀或动态上下文
如果需要组合前缀(如 [API][User]),可让柯里化函数支持连续调用:
const createLogger = (prefix = '') => {
const logger = (...args) => {
console.log(prefix, ...args);
};
logger.with = (suffix) => createLogger(`${prefix}[${suffix}]`);
return logger;
};
const baseLog = createLogger();
const userApiLog = baseLog.with('API').with('User');
userApiLog('logged in'); // → "[API][User] logged in"
这种写法让前缀构建更灵活,适合模块化日志体系(如按功能域、环境、用户角色分层打标)。


















