基础调试-console
// console模块提供了基础的调用功能,使用很简单,常用的api包括 console.log() console.error()
// 此外,可以基于 Console 类,方便的扩展出自己的console实例,比如调用信息打印到文件里,而部署输出到控制台上
基础例子
// 无特殊的说明,日志升是默认打印在控制台的,最常见的就是 console.log() console.error() 这两个方法
const msg = "i am info";
console.log(msg); // 普通日志打印
console.error(msg); // 错误日志打印
console.info(msg); // 等同于 console.log
console.warn(msg); // 等同于 console.error
自定义 stdout
// 可以通过 new console.Console(stdout, stderr) 来创建自定的console实例,这个功能很实用
// 例子:把打印的调试信息打印到本地的文件
const fs = require("fs");
const file = fs.createWriteStream("./stdout.txt");
const logger = new console.Console(file, file);
logger.log("hello");
logger.log("world");
// 生产stdout.txt 打印 hello world
计时
// 通过 console.time(label) 和 console.timeEnd(label) 来打印出两个时间点之前的饿时间差,单位是毫秒
const timeLabel = "hello";
console.time(timeLabel);
setTimeout(() => {
console.timeEnd(timeLabel); // hello: 1.005s
}, 1000);
断言
// 通过 console.assert(value, message) 进行断言,如果value不为true,那么抛出 AssertTionError 异常,并中断程序执行
// 如下代码所示,第二个断言报错,程序停止执行
console.assert(true, "1.right");
console.assert(false, "2.right", "2.wrong"); // Assertion failed: 2.right 2.wrong
// 为了避免程序异常退出,需要对上面的异常进行处理
try {
console.assert(false, "error occured"); // Assertion failed: error occured
} catch (error) {
console.log(error.message);
}
打印错误堆栈 console.trace(msg)
// 将msg打印到标准的错误输出流当中,包含当前代码的位置和堆栈信息
console.trace("trace is called");
// Trace: trace is called
// at demo6 (D:\Node-learning\nodejs-learning-guide-master\practice\console\index.js:61:11)
// at Object.<anonymous> (D:\Node-learning\nodejs-learning-guide-master\practice\console\index.js:63:1)
// at Module._compile (internal/modules/cjs/loader.js:1085:14)
// at Object.Module._extensions..js (internal/modules/cjs/loader.js:1114:10)
// at Module.load (internal/modules/cjs/loader.js:950:32)
// at Function.Module._load (internal/modules/cjs/loader.js:790:12)
// at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:75:12)
// at internal/main/run_main_module.js:17:47
深层打印
// 很少关注 console.dir(obj) 因为大部分时候变现跟 console.log(obj) 差不多
const obj = {
nick: "liang",
};
console.dir(obj); // { nick: 'liang' }
console.log(obj); // { nick: 'liang' }
// 但是当obj的层次比较深的时候,用处就出来了,可以通过depth自定义打印的层数级,默认是2,这对于调试很有帮助
const obj1 = {
human: {
man: {
ingo: {
nick: "liang",
},
},
},
};
console.dir(obj1); // { human: { man: { ingo: [Object] } } }
console.log(obj1); // { human: { man: { ingo: [Object] } } }
console.dir(obj1, { depth: 3 });
// {
// human: { man: { ingo: { nick: 'liang' } } }
// }
相关链接
// 官方文档:https://nodejs.org/api/console.html