Node.js 日志记录基础(console)
console 是 Node.js 最基础的日志工具。
基本方法
输出方法
JavaScript
console.log('普通日志');
console.info('信息日志');
console.warn('警告日志');
console.error('错误日志');
console.debug('调试日志');
输出目标
| 方法 | stdout/stderr |
|---|---|
| log, info, debug | stdout(标准输出) |
| warn, error | stderr(标准错误) |
格式化输出
占位符
JavaScript
// %s - 字符串
console.log('用户: %s', '张三');
// %d - 数字
console.log('年龄: %d', 25);
// %i - 整数
console.log('数量: %i', 3.14); // 输出 3
// %f - 浮点数
console.log('价格: %f', 99.9);
// %j - JSON
console.log('对象: %j', { name: '张三' });
// %o - 对象(详细)
console.log('对象: %o', { name: '张三' });
// %% - 百分号
console.log('进度: 50%%');
多参数
JavaScript
console.log('用户:', '张三', '年龄:', 25);
console.log('数据:', { id: 1 }, [1, 2, 3]);
对象输出
console.dir
JavaScript
const obj = { name: '张三', nested: { a: { b: { c: 1 } } } };
// 深度输出
console.dir(obj, { depth: null }); // 无限深度
console.dir(obj, { depth: 2 }); // 2层深度
console.dir(obj, { colors: true }); // 彩色输出
表格输出
console.table
JavaScript
const users = [
{ name: '张三', age: 25, city: '北京' },
{ name: '李四', age: 30, city: '上海' }
];
console.table(users);
// 指定列
console.table(users, ['name', 'age']);
// 对象输出
console.table({ a: 1, b: 2, c: 3 });
计时功能
console.time/timeEnd
JavaScript
console.time('耗时');
// ... 执行代码
for (let i = 0; i < 1e6; i++) {}
console.timeEnd('耗时'); // 输出: 耗时: 2.123ms
多个计时器
JavaScript
console.time('步骤1');
step1();
console.timeEnd('步骤1');
console.time('步骤2');
step2();
console.timeEnd('步骤2');
计数功能
console.count/countReset
JavaScript
console.count('调用'); // 调用: 1
console.count('调用'); // 调用: 2
console.count('调用'); // 调用: 3
console.countReset('调用');
console.count('调用'); // 调用: 1
分组输出
console.group/groupEnd
JavaScript
console.group('用户信息');
console.log('姓名: 张三');
console.log('年龄: 25');
console.group('地址');
console.log('城市: 北京');
console.log('区: 朝阳');
console.groupEnd();
console.groupEnd();
折叠分组
JavaScript
console.groupCollapsed('详细信息');
console.log('内容1');
console.log('内容2');
console.groupEnd();
断言输出
console.assert
JavaScript
// 条件为 false 时输出
console.assert(1 === 2, '1 不等于 2'); // 输出错误
console.assert(1 === 1, '条件成立'); // 无输出
console.assert(false, { msg: '失败', code: 500 });
清屏
console.clear
JavaScript
console.clear(); // 清除终端输出
追踪输出
console.trace
JavaScript
function inner() {
console.trace('调用追踪');
}
function outer() {
inner();
}
outer();
// 输出调用栈
// Trace: 谈用追踪
// at inner (file.js:2:11)
// at outer (file.js:5:5)
// at Object.<anonymous> (file.js:8:1)
重定向输出
输出到文件
JavaScript
// 通过重定向
// node app.js > output.log 2> error.log
// > 重定向 stdout
// 2> 重定向 stderr
// 或代码中重定向
const fs = require('fs');
const output = fs.createWriteStream('./output.log');
const error = fs.createWriteStream('./error.log');
const logger = new console.Console(output, error);
logger.log('写入文件');
logger.error('写入错误文件');
注意事项
- console 输出到 stdout/stderr,不适合复杂日志管理
- 生产环境使用 winston、pino 等专业框架
- console.log 会阻塞事件循环,大量使用影响性能
- 日志中避免敏感信息(密码、令牌)
- 使用 pm2 或重定向收集日志文件
要点总结
console.log/info/warn/error基本输出- 占位符
%s %d %j %o格式化 console.table表格输出对象数组console.time/timeEnd计时测量console.trace追踪调用栈
📝 发现内容有误?点击此处直接编辑