提高 JavaScript 日志可读性,核心目标是:一眼能看懂、方便定位问题、便于排查线上问题。可以从「内容规范、结构调整、工具辅助、生产实践」几个层面来做。
console.log() 打印不明内容❌ 不推荐:
console.log(data);
✅ 推荐:
console.log('用户信息:', data);
console.log('请求参数', {
url: '/api/list',
params,
timestamp: Date.now(),
});
✅ 好处:
推荐统一前缀 + 字段:
const log = (module, action, data) => {
console.log(`[${module}] ${action}`, data);
};
log('User', 'login', { userId: 1 });
输出:
[User] login { userId: 1 }
| 方法 | 用途 |
|---|---|
console.log |
普通信息 |
console.warn |
警告 |
console.error |
错误 |
console.info |
提示 |
console.debug |
调试(可关闭) |
示例:
console.warn('接口返回异常,但已降级处理');
console.error('支付失败', err);
console.log(
'%c用户模块',
'color: white; background: #007acc; padding: 2px 6px; border-radius: 4px;'
);
✅ 适合:
console.group('订单流程');
console.log('创建订单');
console.log('支付');
console.groupEnd();
console.table(users);
console.log(new Date().toISOString(), '页面加载完成');
或更标准:
console.log(Date.now(), '页面加载完成');
console.log(`[${import.meta.env.MODE}] 初始化完成`);
try {
throw new Error('fail');
} catch (e) {
console.error(e.message, e.stack);
}
console.log原因:
const logger = {
prefix: '[App]',
log(...args) {
console.log(this.prefix, ...args);
},
error(...args) {
console.error(this.prefix, ...args);
},
};
const logger = {
enabled: process.env.NODE_ENV !== 'production',
log(...args) {
if (this.enabled) console.log(...args);
},
};
示例(loglevel):
import log from 'loglevel';
log.setLevel('info');
log.info('服务启动');
console.log如果你愿意,我可以:
只要告诉我你的使用场景即可。