node.js 之 Console 打印调试信息

时间:2022-04-17 20:43:00

node.js 之 Console 打印调试信息

  1. 简介

    console模块提供了简单的调试输出的工具和浏览器的console类似
    这个模块导出了两个指定的组件
    第一个,一个Console类,有诸如console.log().console.error()和console.warn()这样的方法,能够输出任何的Node.js数据流
    第二个,全局的console实例,用来输出stdout和stderr,不需要导入require('console')
  2. API

    1.console类
    可以创建一个简单的记录器,输出的数据流可配置并且可以通过require('console').Console或者console.Console这样的方式创建
    const {Console} = require('console');
    const {Console} = console;
    两者等价
    2.new Console(stdout[, stderr])
    传递两个可写的数据流实例来创建一个新的Console实例,stdout是一个可写的数据流用来打印输出记录或者信息,stderr是用来打印输出警告和错误信息,如果没有传递stderr,那么警告和错误信息会移交给stdout,他们两个的信息输出到指定的文件中,下面是例子
    首先自行创建 stdout.logstderr.log 文件
    const fs = require('fs');
    const { Console } = require('console');
    const output = fs.createWriteStream('./stdout.log');
    const errOutput = fs.createWriteStream('./stderr.log');
    const logger = new Console(output, errOutput);
    const count = 5;
    logger.log('count: %d', count)
    注意:全局的console其实就是上面的一种特殊情况,只不过全局console的output给了process.stdoutprocess.stderr也就是new Console(process.stdout,process.stderr);
    3.console.assert(value[, message][, ...args])
    这是一个简单的断言测试用来验证value是否是真的,如果不是就会抛出一个断言错误,后续的代码不会执行,如果提供了message那么这个会当做错误信息打印出来
    注意:这个方法和浏览器的console.assert()方法有差别,浏览器的断言测试不会中断后续的代码的执行,如果想在node中实现和浏览器相同的功能可以通过扩展Node.js的console模块和重写console.assert()方法
    4.console.dir(obj[, options])
    此方法用来将一个对象每一项都打印成字符串,相当于把对象的键值对展示出来,不需要传递任何的inspect()函数,options是可选的用来对输出的结果做一定的修改,参数如下
    showHidden 是否展示出不可枚举的信息
    depth 递归的次数,无限次递归传递null
    colors 将结果转化成样式代码 //{ a: [33m1[39m, b: [33m2[39m }
    5.console.error([data][, ...args])
    将信息输出给stderr,可以传递多个参数,其中data是主要的信息参数,其余的args参数是用来当做变量替换的,例子如下
    const code = 5;
    console.error('error #%d',code);
    %d是格式化元素,如果没有传递,参数之间就是通过简单的串联拼接,%d是C语言中格式化输出的,类似于printf("a=%d",a);a就是整形值
    6.console.info([data][, ...args])
    此方法和console.log类似
    7.console.log([data][, ...args])
    将信息输出到stdout中,其余和console.error一致
    8.console.time(label)
    这个方法有点意思,是用来记录一段程序执行的时间,label是字符串标记
    logger.time('a3');
    var a = 1
    for (var i = 0; i < 1000; i++) {
    a += i
    }
    logger.timeEnd('a3')
    记录的时间就会输出到stdout中
    9.console.trace([message][, ...args])
    将message当前所在的位置(堆栈追踪),和message输出到stderr中
    例子:
    console.trace('Show me');
    在我的stderr.log文件中输入
    Trace: Show me
    at Object.<anonymous> (C:\Users\jky\Desktop\demo\node.js\demo.js:23:8)
    at Module._compile (module.js:569:30)
    at Object.Module._extensions..js (module.js:580:10)
    at Module.load (module.js:503:32)
    at tryModuleLoad (module.js:466:12)
    at Function.Module._load (module.js:458:3)
    at Function.Module.runMain (module.js:605:10)
    at startup (bootstrap_node.js:158:16)
    at bootstrap_node.js:575:3
    10.console.warn([data][, ...args])
    此方法是console.error()方法的别名