【Node.js】API学习之console模块

636 阅读2分钟

Console

介绍

Console类似于浏览器环境中的 console 控制台。

构造函数

const fs = require('fs');
const { Console } = require('console');

// stdout和stderr分别为日志输出流和错误输出流,
const logger = new Console({
  stdout: fs.createWriteStream('./stdout.log', { flags: 'a' }),
  stderr: fs.createWriteStream('./stderr.log', { flags: 'a' }),
});

// 将内容分别写入'stdout.log'和'stderr.log'中
logger.log(`${Date.now()} - log`);
logger.error(`${Date.now()} - err`);

// console则是一个无需导入的全局Console实例,
// 其stdout和stderr分别为process.stdout和process.stderr
console.log('hello world!');

方法

log/debug/info

// 输出内容到stdout中
console.log('hello world!');

error/warn

// 输出内容到stderr中
console.log('byebye world!');

trace

// 以'Trace: '为开头,输出内容和堆栈跟踪到stderr中
console.trace('follow me!');
// 输出如下:
// Trace: follow me!
//     at Object.<anonymous> (xxxxxx\test.js:1:9)
//     at Module._compile (internal/modules/cjs/loader.js:956:30)
//     at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
//     at Module.load (internal/modules/cjs/loader.js:812:32)
//     at Function.Module._load (internal/modules/cjs/loader.js:724:14)
//     at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
//     at internal/main/run_main_module.js:17:11

table

// 如果内容格式'规整'的话,则以表格形式输出它
const heros = [{ name: 'Ashe' }, { name: 'Garen' }, { name: 'Ryze' }];
console.table(heros);
// 输出如下:
// ┌─────────┬─────────┐
// │ (index) │  name   │
// ├─────────┼─────────┤
// │    0    │ 'Ashe'  │
// │    1    │ 'Garen' │
// │    2    │ 'Ryze'  │
// └─────────┴─────────┘

dir 和 dirxml

// 类似浏览器中的dir和dirxml方法,可传入配置参数,
// showHidden:是否显示对象的不可枚举属性和Symbol属性
// depth: 对象格式化的深度,设置为null时表示为无限
// colors: 多彩化设置
const obj = {
  a: { b: { c: { d: { e: { f: { g: { h: 1, [Symbol()]: 2 } } } } } } },
};

console.log(obj);
// 输出:
// { a: { b: { c: [Object] } } }

console.dir(obj, {
  showHidden: false,
  depth: null,
  colors: true,
});
// 输出:
// {
//   a: {
//     b: {
//       c: {
//         d: {
//           e: { f: { g: { h: 1, [Symbol()]: 2 } } }
//         }
//       }
//     }
//   }
// }

assert

// 如果第一个参数为true,则什么也不做;
// 如果第一个参数为false,则以'Assertion failed'为开头,输出内容
console.assert(true, 'nothing'); // 没有任何输出
console.assert(false, 'something'); // 'Assertion failed: something'

count 和 countReset

// count用于计数;
// countReset用于重置计数
console.count('a'); // 'a: 1'
console.count('a'); // 'a: 2'
console.count('a'); // 'a: 3'
console.count('b'); // 'b: 1'
console.count('b'); // 'b: 2'
console.count('a'); // 'a: 4'
console.count('b'); // 'b: 3'
console.countReset('a');
console.count('a'); // 'a: 1'

time、timeLog 和 timeEnd

// time用于启动计时;
// timeLog用于获取计时;
// timeEnd用于结束计时
console.time('test');
for (let i = 0; i < 100; i++) {
  if (i % 10 === 0) console.timeLog('test');
}
console.timeEnd('test');
// 输出如下(共10+1行):
// 'test: 0.617ms'
// 'test: 8.259ms'
// 'test: 8.592ms'
// 'test: 9.516ms'
// 'test: 9.773ms'
// 'test: 10.049ms'
// 'test: 10.297ms'
// 'test: 10.596ms'
// 'test: 11.048ms'
// 'test: 11.347ms'
// 'test: 11.726ms'

group/groupCollapsed 和 groupEnd

// group用于增加groupIndentation个缩进;
// groupEnd用于减少groupIndentation个缩进
const { Console } = require('console');
const indentConsole = new Console({
  stdout: process.stdout,
  groupIndentation: 2,
});
indentConsole.log('indent-0');
indentConsole.group();
indentConsole.log('indent-2');
indentConsole.group();
indentConsole.log('indent-4');
indentConsole.groupEnd();
indentConsole.log('indent-2');
indentConsole.groupEnd();
indentConsole.log('indent-0');
// 输出如下:
// 'indent-0'
//   'indent-2'
//     'indent-4'
//   'indent-2'
// 'indent-0'

clear

// 仅在终端中有效,作用是清空当前终端输出