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
// 仅在终端中有效,作用是清空当前终端输出