NodeJS学习笔记 (18)基础调试-console(ok)
模块概览
console模块提供了基础的调试功能。使用很简单,常用的API主要有 console.log()、console.error()。
此外,可以基于Console类,方便的扩展出自己的console实例,比如把调试信息打印到文件里,而部署输出在控制台上。
直接看例子。
基础例子
无特殊说明,日志都是默认打印到控制台。最常用的是console.log()、console.error()两个方法。
- console.log(msg):普通日志打印。
- console.error(msg):错误日志打印。
- console.info(msg):等同于console.log(msg)
- console.warn(msg):等同于console.error(msg)
例子如下:
console.log('log: hello');
console.log('log: hello', 'chyingp');
console.log('log: hello %s', 'chyingp');
console.error('error: hello');
console.error('error: hello', 'chyingp');
console.error('error: hello %s', 'chyingp');
// 输出如下:
// log: hello
// log: hello chyingp
// log: hello chyingp
// error: hello
// error: hello chyingp
// error: hello chyingp
自定义stdout
可以通过 new console.Console(stdout, stderr) 来创建自定义的console实例,这个功能很实用。
比如你想将调试信息打印到本地文件,那么,就可以通过如下代码实现。
var fs = require('fs');
var file = fs.createWriteStream('./stdout.txt');
var logger = new console.Console(file, file);
logger.log('hello');
logger.log('word');
// 备注:内容输出到 stdout.txt里,而不是打印到控制台
计时
通过console.time(label)和console.timeEnd(label),来打印出两个时间点之间的时间差,单位是毫秒,例子如下。
var timeLabel = 'hello' console.time(timeLabel); setTimeout(console.timeEnd, 1000, timeLabel);
// 输入出入:
// hello: 1005.505ms
断言
通过 console.assert(value, message) 进行断言。如果value不为true,那么抛出AssertionError异常,并中断程序执行。
如下代码所示,第二个断言报错,程序停止执行。
console.assert(true, '1、right');
console.assert(false, '2、right', '2、wrong'); // 输出如下:
// assert.js:90
// throw new assert.AssertionError({
// ^
// AssertionError: 2、right 2、wrong
// at Console.assert (console.js:95:23)
为避免程序异常退出,需要对上面的异常进行处理,比如:
try{
console.assert(false, 'error occurred');
}catch(e){
console.log(e.message);
}
// 输出如下:
// error occurred
打印错误堆栈:console.trace(msg)
将msg打印到标准错误输出流里,包含当前代码的位置和堆栈信息。
console.trace('trace is called');
// 输出如下:
// Trace: trace is called
// at Object.<anonymous> (/Users/a/Documents/git-code/nodejs-learning-guide/examples/2016.12.01-console/trace.js:1:71)
// at Module._compile (module.js:541:32)
// at Object.Module._extensions..js (module.js:550:10)
// at Module.load (module.js:456:32)
// at tryModuleLoad (module.js:415:12)
// at Function.Module._load (module.js:407:3)
// at Function.Module.runMain (module.js:575:10)
// at startup (node.js:160:18)
// at node.js:445:3
深层打印
很少关注 console.dir(obj),因为大部分时候表现跟 console.log(obj) 差不多,看例子
var obj = {
nick: 'chyingp'
};
console.log(obj); // 输出:{ nick: 'chyingp' }
console.dir(obj); // 输出:{ nick: 'chyingp' }
但当obj的层级比较深时,用处就出来了。可以通过depth自定义打印的层级数,默认是2,这对于调试很有帮助。
var obj2 = {
human: {
man: {
info: {
nick: 'chyingp'
}
}
}
};
console.log(obj2); // 输出:{ human: { man: { info: [Object] } } }
console.dir(obj2); // 输出:{ human: { man: { info: [Object] } } }
console.dir(obj2, {depth: 3}); // 输出:{ human: { man: { info: { nick: 'chyingp' } } } }
相关链接
NodeJS学习笔记 (18)基础调试-console(ok)的更多相关文章
- Nodejs学习笔记:基础
本文章主要记录Nodejs基础知识点 安装 首先从Node.js官网下载安装包,并添加到环境变量.然后打开命令行,输入 node --version ,可查看版本信息 npm是Node.js的包管理工 ...
- NodeJS学习笔记 (19)进阶调试-debugger(ok)
写在前面 谈到node断点调试,目前主要有三种方式,通过node内置调试工具.通过IDE(如vscode).通过node-inspector,三者本质上差不多.本文着重点在于介绍 如何在本地通过nod ...
- nodejs学习笔记Node.js 调试命令
3.4 调试 47 下面是一个简单的例子: $ node debug debug.js < debugger listening on port 5858 connecting ...
- Nodejs学习笔记(二)——Eclipse中运行调试Nodejs
前篇<Nodejs学习笔记(一)——初识Nodejs>主要介绍了在搭建node环境过程中遇到的小问题以及搭建Eclipse开发Node环境的前提步骤.本篇主要介绍如何在Eclipse中运行 ...
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
目录 前言&介绍 安装Pomelo 创建项目并启动 创建项目 项目结构说明 启动 测试连接 聊天服务器 新建gate和chat服务器 配置master.json 配置servers.json ...
- Nodejs学习笔记(十六)—Pomelo介绍&入门
前言&介绍 Pomelo:一个快速.可扩展.Node.js分布式游戏服务器框架 从三四年前接触Node.js开始就接触到了Pomelo,从Pomelo最初的版本到现在,总的来说网易出品还算不错 ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
目录 前言 新建express项目并自定义路由规则 如何提取页面中的公共部分? 如何提交表单并接收参数? GET 方式 POST 方式 如何字符串加密? 如何使用session? 如何使用cookie ...
- Nodejs学习笔记(十五)--- Node.js + Koa2 构建网站简单示例
目录 前言 搭建项目及其它准备工作 创建数据库 创建Koa2项目 安装项目其它需要包 清除冗余文件并重新规划项目目录 配置文件 规划示例路由,并新建相关文件 实现数据访问和业务逻辑相关方法 编写mys ...
随机推荐
- correct ways to define variables in python
http://stackoverflow.com/questions/9056957/correct-way-to-define-class-variables-in-python later say ...
- js中cookie的使用 以及缺点
什么是Cookie Cookie意为“甜饼”,是由W3C组织提出,最早由Netscape社区发展的一种机制.目前Cookie已经成为标准,所有的主流浏览器如IE.Netscape.Firefox. ...
- 使用NFS共享硬盘
1. 安装 sudo apt install nfs-kernel-server 2. 配置 sudo vi /etc/exports /mnt/NewDisk *(rw,sync,no_ ...
- Java8 方法引用与构造器引用,数组引用
package java_8; import org.junit.Test; import java.io.PrintStream; import java.util.Comparator; impo ...
- MYSQL主从复制搭建及切换操作(GTID与传统)
结构如下: MYSQL主从复制方式有默认的复制方式异步复制,5.5版本之后半同步复制,5.6版本之后新增GTID复制,包括5.7版本的多源复制. MYSQL版本:5.7.20 操作系统版本:linux ...
- C#~异步编程再续~你必须要知道的ThreadPool里的throw
问题依旧存在 之前写过相关文章异步编程的文章,本文主要还是一点补充,之前在IIS经常发w3wp进程无做挂了的情况,但一直没能找到真正的原因,而查找相关资料,找了一些相关的文章,如await和async ...
- SQL 的stuff函数
1.作用 删除指定长度的字符,并在指定的起点处插入另一组字符. 2.语法 STUFF ( character_expression , start , length ,character_expres ...
- Windows环境下使用Guard整合Compass和Livereload进行SASS的开发
配置运行环境 Guard,Compass 和 Livereload 是 Ruby 的 Gem 套件,需要 Ruby 运行环境.另外还需要安装 Ruby 的扩展开发包 Development-Kit,以 ...
- (转)Java 虚拟机体系结构
来源:http://hxraid.iteye.com/blog/676235 众所周知,Java源代码被编译器编译成class文件.而并不是底层操作系统可以直接执行的二进制指令(比如Windows O ...
- python 中进制转换及format(),int()函数用法
python中数值型变量好像只能是十进制形式表示,其他类型变量只能以字符串形式存在,可以通过format函数将int类型变量转换成其他进制字符串,如下所示: v_code=15 # 2进制 x=for ...