15-基础调试-console

113 阅读2分钟

基础调试-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