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 ...
随机推荐
- Python入门机器学习
如何通过Python入门机器学习 我们都知道机器学习是一门综合性极强的研究课题,对数学知识要求很高.因此,对于非学术研究专业的程序员,如果希望能入门机器学习,最好的方向还是从实践触发. 我了解到Pyt ...
- 如何设置ASP.NET站点页面运行超时
全局超时时间 服务器上如果有多个网站,希望统一设置一下超时时间,则需要设置 Machine.config 文件中的 ExecutionTimeout 属性值.Machine.config 文件位于 % ...
- 初识Git(二)
与我们前一篇随笔一样创建文件夹,init我们创建的文件夹,并且创建一个test.txt文本文件,add文本文件,commit文本文件,接下来在文本文件中添加文本: 与上一次不同的是我们这一次在编辑文件 ...
- swfit的特点
swfit的特点: 1.swift句尾不需要分号,除非你想在一行中写三行代码就加分号隔开. 2.swift不要写main函数,程序默认从上往下执行 3.swift不分.h和.m文件,一个类只有.swi ...
- Python内置数据结构之列表list
1. Python的数据类型简介 数据结构是以某种方式(如通过编号)组合起来的数据元素(如数.字符乃至其他数据结构)集合.在Python中,最基本的数据结构为序列(sequence). Python内 ...
- worldcount
码云项目地址 PSP2.1 PSP阶段 预估耗时 (分钟) 实际耗时 (分钟) Planning 计划 20 20 Estimate 估计这个任务需要多少时间 60 70 Development 开发 ...
- 洛谷P2870 [USACO07DEC]最佳牛线,黄金Best Cow Line, Gold
思路大概和其他的题解一样: 从当前字符串最前面,最后面选一个字典序较小的然后拉到一个新的字符串序列中,如果相同就一直往中间扫描直到发现不同为止(一个字符如果被选中之后那么就不可以再次选择了),所以我们 ...
- size(A,1)
在matlab中,size()用来返回数据序列的行数和列数.size(A,1)返回的是矩阵A所对应的行数.另外,(1)s=size(A), 当只有一个输出参数时,返回一个行向量,该行向量的第一个元素时 ...
- VS2015--win32project配置的一些想法之cmake
近期两天都在配置一个win32项目.为了实现跨平台,写底层代码的人仅仅build了安卓和ios的工程,没有build win32项目. 因为对一些库不是非常了解.配置起来非常困难,心力交瘁. 为了实现 ...
- hdoj Let the Balloon Rise
/*Let the Balloon Rise Problem Description Contest time again! How excited it is to see balloons ...