基于Noop的Node控制台包装器改造:封装自定义Logger函数
自定义可开关的Node.js Logger实现
这里有一个基于*noop(空操作)*思路实现的控制台日志封装方案,通过force参数就能轻松控制日志的开启与关闭,完全符合你的需求:
function Logger(force) { const logging = {}; if (force) { // 开启模式:绑定所有console的方法,保留原生行为 for (let m in console) { if (typeof console[m] === 'function') { logging[m] = console[m].bind(console); } } } else { // 关闭模式:给所有console方法赋值noop空函数,调用无任何输出 for (let m in console) { if (typeof console[m] === 'function') { logging[m] = function() {}; } } } return logging; } // 使用示例 const debugOff = Logger(false); debugOff.log("this WILL NOT log"); // 无任何输出 debugOff.error("errors are suppressed too"); // 同样无输出 const debugOn = Logger(true); debugOn.log("This will log to your console!"); // 正常输出日志 debugOn.warn("Warnings, errors, and all other console methods work here"); // 原生console的所有方法都能正常使用
核心逻辑说明
- 开启模式(
force: true):遍历console对象的所有方法,把它们绑定到原生console上下文后挂载到返回的logging对象上,这样调用Logger的方法时就和直接用console完全一致。 - 关闭模式(
force: false):同样遍历console的方法,但给每个方法赋值一个noop空函数,调用时不会执行任何操作,自然也就不会输出日志。
小优化建议
可以给force参数设置默认值,比如默认关闭日志,这样使用起来更灵活:
function Logger(force = false) { // 原逻辑保持不变 } // 默认关闭日志 const defaultLogger = Logger(); defaultLogger.log("This won't log unless you pass true");
内容的提问来源于stack exchange,提问作者sansSpoon
相关产品推荐
相关产品推荐

