柯里化日志工具通过预置level和prefix生成专用函数,如createlogger('debug','[api]')返回可直接调用的debugapi;支持环境判断、时间戳、上下文注入,并建议集中管理与工程化集成。

柯里化在日志调试工具中非常实用:它能让你提前固定日志级别(如 debug、warn)和模块前缀(如 [API]、[UI]),生成专用的日志函数,避免每次调用都重复写相同参数,让日志更清晰、调用更简洁。
用柯里化预置日志级别和模块前缀
核心思路是把 level 和 module 作为前置参数固化,返回一个只接收 message 和可选 ...args 的函数。例如:
const debugAPI = curryLog('debug', '[API]');
debugAPI('fetch started', { id: 123 });
→ 控制台输出:[DEBUG][API] fetch started {id: 123}
手写一个轻量柯里化日志工厂
不需要完整柯里化库,一个简单工厂函数即可满足场景:
- 接受
level(字符串)和prefix(字符串)作为初始参数 - 返回函数接收
message和剩余参数...args - 内部统一调用
console[level],并拼接格式化前缀
示例实现:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
function createLogger(level, prefix) {
return function(message, ...args) {
const timestamp = new Date().toISOString().slice(11, 23);
const formattedPrefix = `[${level.toUpperCase()}]${prefix}`;
console[level](`${formattedPrefix} ${message}`, ...args);
};
}
// 使用
const infoAuth = createLogger('info', '[AUTH]');
const errorDB = createLogger('error', '[DB]');
infoAuth('login success', { user: 'alice' });
errorDB('connection timeout', new Error('ETIMEDOUT'));
支持动态上下文与环境判断
实际开发中常需按环境开关日志或增强上下文。可在柯里化基础上加一层封装:
- 检查
process.env.NODE_ENV !== 'production'再执行输出 - 自动注入当前文件名或调用栈信息(通过
new Error().stack简单提取) - 为不同模块批量创建 logger 对象,例如:
loggers.auth.debug()
例如增强版:
function makeLogger(level, prefix) {
if (process.env.NODE_ENV === 'production') {
return () => {}; // 生产环境静默
}
return function(message, ...args) {
const now = new Date().toLocaleTimeString();
console[level](`[${now}] ${prefix} ${message}`, ...args);
};
}
配合现代前端工程实践的建议
在真实项目中,推荐结合以下方式提升可维护性:
- 将常用模块 logger 集中定义在
src/utils/logger.js中,导出命名函数(如logAPI、logRouter) - 利用 ESLint 规则禁止直接使用
console.*,强制走封装后的 logger - 如需日志上报,可在
createLogger内部追加reportToSentry()等逻辑,不影响调用侧 - TypeScript 用户可添加泛型和重载,让
logError自动推导Error类型参数
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










