柯里化可固化日志级别、前缀、格式等配置生成定制函数,支持多层参数预置、输出目标切换、bind轻量实现及上下文自动注入。

可以用柯里化把日志级别、前缀、格式等配置提前固化,生成可复用的定制化日志函数,后续调用时只需传入实际消息内容。
基础柯里化日志函数
先定义一个支持多级参数拆分的日志工厂函数,接收日志级别、可选前缀和时间格式控制,返回一个只等消息体的函数:
const createLogger = (level, prefix = '', showTime = true) => {
return (message) => {
const time = showTime ? `[${new Date().toISOString().slice(11, 19)}] ` : '';
const header = `${time}[${level.toUpperCase()}] ${prefix ? `[${prefix}] ` : ''}`;
console[level](header + message);
};
};这样就能生成不同用途的日志函数:
- errorLog = createLogger('error', 'API');
- debugLog = createLogger('debug', 'Cache', false);
- infoLog = createLogger('info', 'App');
支持更灵活配置的柯里化(带参数预设)
如果还想支持动态切换输出目标(比如开发环境打 console,生产发上报),可以再加一层柯里化,把「行为」也作为可预置项:
const createLogger = (output = console.log) => (level) => (prefix = '') => (message) => {
const time = new Date().toISOString().slice(11, 19);
const header = `[${time}][${level.toUpperCase()}]${prefix ? ` [${prefix}]` : ''}`;
output(header + ' ' + message);
};
<p>// 使用示例
const devLogger = createLogger(console.log)('info')('UI');
devLogger('按钮点击'); // [14:22:35][INFO] [UI] 按钮点击</p><p>const warnLogger = createLogger(console.warn)('warn')('Network');
warnLogger('请求超时'); // [14:22:35][WARN] [Network] 请求超时</p>结合 bind 实现轻量柯里化(适合简单场景)
不需要完整柯里化逻辑时,用 Function.prototype.bind 快速固定前几个参数也很实用:
- apiError = console.error.bind(console, '[API ERROR]');
- authInfo = console.info.bind(console, '[AUTH]');
调用时直接传剩余参数:apiError('Token expired', 401) → 控制台输出 [API ERROR] Token expired 401。
进阶:支持异步日志与上下文绑定
若需在日志中自动注入 traceId、用户 ID 等上下文,可在柯里化中闭包保存 context,并支持后续 merge 新字段:
const createContextLogger = (context = {}) => (level) => (message, extra = {}) => {
const merged = { ...context, ...extra, timestamp: new Date().toISOString() };
console[level](`[${level.toUpperCase()}]`, message, merged);
};
<p>const userLogger = createContextLogger({ userId: 'u_123', sessionId: 's_789' })('info');
userLogger('登录成功', { ip: '192.168.1.100' });
// 输出:[INFO] 登录成功 { userId: 'u_123', sessionId: 's_789', timestamp: '...', ip: '192.168.1.100' }</p>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











