前端日志分级怎么合理设置才不会影响性能?
我们项目里现在所有日志都用console.log,上线后发现控制台太乱,想按 info/warn/error 分级,但又怕加太多判断影响性能。有没有轻量又清晰的做法?
比如我现在这样写,感觉每次都要判断环境,重复代码太多了:
const log = {
info: (msg) => process.env.NODE_ENV === 'development' && console.log(msg),
warn: (msg) => process.env.NODE_ENV === 'development' && console.warn(msg),
error: (msg) => console.error(msg) // 错误始终要记录
};
最简单直接的写法:
这样写的好处是环境判断只在模块初始化时执行一次。生产环境下 info 和 warn 会被替换成空函数
() => {},调用时完全没有判断逻辑,开销几乎为零。如果你需要更灵活分级(比如测试环境只开 warn 以上),可以这样:
这种写法利用了短路求值,生产环境 level 是 0,只有 error 条件成立。其他级别直接返回 false,不会执行 console 方法。
另外注意安全方面:生产环境如果真的需要记录日志,光用 console 可不行,最好接一个真正的日志服务,可以考虑把 error 级别的日志上报到监控系统,而不是只打印到控制台。