Node.js利用debug模块打印出调试日志的方法


Posted in Javascript onApril 25, 2017

前言

大家都知道在node程序开发中时,经常需要打印调试日志。用的比较多的是debug模块,比如express框架中就用到了。下文简单举几个例子进行说明。文中相关代码示例,可在这里找到。

备注:node在0.11.3版本也加入了util.debuglog()用于打印调试日志,使用方法跟debug模块大同小异。

基础例子

首先,安装debug模块。

npm install debug

使用很简单,运行node程序时,加上DEBUG=app环境变量即可。

/**
 * debug基础例子
 */
var debug = require('debug')('app');

// 运行 DEBUG=app node 01.js
// 输出:app hello +0ms
debug('hello');

例子:命名空间

当项目程序变得复杂,我们需要对日志进行分类打印,debug支持命令空间,如下所示。

  • DEBUG=app,api:表示同时打印出命名空间为app、api的调试日志。
  • DEBUG=a* :支持通配符,所有命名空间为a开头的调试日志都打印出来。
/**
 * debug例子:命名空间
 */
var debug = require('debug');
var appDebug = debug('app');
var apiDebug = debug('api');

// 分别运行下面几行命令看下效果
// 
//  DEBUG=app node 02.js
//  DEBUG=api node 02.js
//  DEBUG=app,api node 02.js
//  DEBUG=a* node 02.js
//  
appDebug('hello');
apiDebug('hello');

例子:命名空间排除

有的时候,我们想要打印出所有的调试日志,除了个别命名空间下的。这个时候,可以通过-来进行排除,如下所示。-account*表示排除所有以account开头的命名空间的调试日志。

/**
 * debug例子:排查命名空间
 */
var debug = require('debug');
var listDebug = debug('app:list');
var profileDebug = debug('app:profile');
var loginDebug = debug('account:login');

// 分别运行下面几行命令看下效果
// 
//   DEBUG=* node 03.js
//   DEBUG=*,-account* node 03.js
//   
listDebug('hello');
profileDebug('hello');
loginDebug('hello');

例子:自定义格式化

debug也支持格式化输出,如下例子所示。

var debug = require('debug')('app');

debug('my name is %s', 'chyingp');

此外,也可以自定义格式化内容。

/**
 * debug:自定义格式化
 */
var createDebug = require('debug')

createDebug.formatters.h = function(v) {
 return v.toUpperCase();
};

var debug = createDebug('foo');

// 运行 DEBUG=foo node 04.js 
// 输出 foo My name is CHYINGP +0ms
debug('My name is %h', 'chying');

相关链接

debug:https://github.com/visionmedia/debug
debuglog:https://nodejs.org/api/util.html#util_util_debuglog_section

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持

Javascript 相关文章推荐
javascript hashtable实现代码
Oct 13 Javascript
json的前台操作和后台操作实现代码
Jan 20 Javascript
判断输入是否为空,获得输入类型的JS代码
Oct 30 Javascript
JavaScript动态插入CSS的方法
Dec 10 Javascript
最好用的Bootstrap fileinput.js文件上传组件
Dec 12 Javascript
JS使用面向对象技术实现的tab选项卡效果示例
Feb 28 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
Mar 21 Javascript
原生javascript上传图片带进度条【实例分享】
Apr 06 Javascript
AngularJS中使用three.js的实例详解
Jul 21 Javascript
js实现省市级联效果分享
Aug 10 Javascript
Threejs实现滴滴官网首页地球动画功能
Jul 13 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
JS实现禁止高频率连续点击的方法【基于ES6语法】
Apr 25 #Javascript
json的结构与遍历方法实例分析
Apr 25 #Javascript
详谈jQuery中使用attr(), prop(), val()获取value的异同
Apr 25 #jQuery
用vue和node写的简易购物车实现
Apr 25 #Javascript
ES6数组的扩展详解
Apr 25 #Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 #Javascript
如何在 Vue.js 中使用第三方js库
Apr 25 #Javascript
You might like
php读取msn上的用户信息类
2008/12/05 PHP
PHP不用第三变量交换2个变量的值的解决方法
2013/06/02 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
php实现上传图片保存到数据库的方法
2015/02/11 PHP
PHP魔术方法以及关于独立实例与相连实例的全面讲解
2016/10/18 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
Thinkphp事务操作实例(推荐)
2017/04/01 PHP
PHP 命名空间和自动加载原理与用法实例分析
2020/04/29 PHP
JavaScript flash复制库类 Zero Clipboard
2011/01/17 Javascript
IE8提示Invalid procedure call or argument 异常的解决方法
2012/09/30 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
浅析tr的隐藏和显示问题
2014/03/05 Javascript
js使用心得分享
2015/01/13 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
ajax实现动态下拉框示例
2017/01/10 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
浅谈vue路径优化之resolve
2017/10/13 Javascript
基于JavaScript实现抽奖系统
2018/01/16 Javascript
Vue中用props给data赋初始值遇到的问题解决
2018/11/27 Javascript
Javascript如何实现双指控制图片功能
2020/02/25 Javascript
Python实现测试磁盘性能的方法
2015/03/12 Python
Python pandas实现excel工作表合并功能详解
2019/08/29 Python
python标准库OS模块函数列表与实例全解
2020/03/10 Python
详解Python+Selenium+ChromeDriver的配置和问题解决
2021/01/19 Python
使用CSS3实现一个3D相册效果实例
2016/12/03 HTML / CSS
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
Android本地应用打开方法——通过html5写连接
2016/03/11 HTML / CSS
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
英国女装网上商店:I Saw It First
2018/10/18 全球购物
大学新生军训方案
2014/05/03 职场文书
厉行勤俭节约倡议书
2014/05/16 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
务虚会发言材料
2014/12/25 职场文书
2015年秋季新学期寄语
2015/03/25 职场文书
电信营业员岗位职责
2015/04/14 职场文书
React四级菜单的实现
2022/04/08 Javascript