Nodejs进阶:用debug模块打印调试日志

前言

在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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Python爬虫实战

Python生成目录树

在 windows 系统中,有一个 CMD 指令可以生成目录树,该条指令是 "tree" 。

711
来自专栏测试开发架构之路

vs2010点调试,显示系统找不到指定的文件

首先,查看“项目”-“属性”-“链接器”-“常规”-“输出文件”,路劲是否是“bin/xxx.exe”, 如果是请继续看我的解答,否则请忽略下面的内容。 原因是...

2817
来自专栏喵了个咪的博客空间

phalcon-入门篇3(优美的URL与Config)

phalcon-入门篇3(优美的URL路由与Config) ? 本教程基于phalcon2.0.9版本 前言先在这里感谢各位phalcon技术爱好者,我们提供这...

2786
来自专栏邹立巍的专栏

find 命令详解

find 命令是我们日常工作中比较常用的 Linux 命令。全面的掌握这个命令可以使很多操作达到事半功倍的效果。如果对 find 命令有以下这些疑惑,本文都能帮...

4371
来自专栏技术博文

多个域名向主域名自动跳转的Nginx配置

if ($host = "bbs.umiwi.com"){ rewrite ^/(.*)$ http://bbs.youmi.cn/$1 permanen...

3375
来自专栏Flutter入门

Android 屏幕录制GIF脚本

因为一直需要将Android手机上的效果录制下来,转成gif,然后上传到博客上。 原来都需要手动操作好几次,所以索性的写了一个脚本来配合使用。

1301
来自专栏IMWeb前端团队

Webpack实战-管理多个单页应用

本文作者:IMWeb 吴浩麟 原文出处:IMWeb社区 未经同意,禁止转载 引入问题 上一节3-9为单页应用生成HTML中只生成了一个 HTML 文件...

3155
来自专栏从零开始学自动化测试

python爬虫beautifulsoup4系列3

前言 本篇手把手教大家如何爬取网站上的图片,并保存到本地电脑 一、目标网站 1.随便打开一个风景图的网站:http://699pic.com/sousuo...

33710
来自专栏CaiRui

Python模块

简介: 模块:用一坨代码实现了某个功能的代码集合。分为三种: 自定义模块 第三方模块 内置模块 python去找模块的路径 ? 其中,第三方模块安装的位置 ? ...

1928
来自专栏编程

Linux文件目录常用操作、重定向与管道

文件目录常用操作 1、查找文件 (1)find命令 格式:find 目录名 条件 常见条件: -name指定要被寻找的文件或者目录的名称(可用通配符) -typ...

2999

扫码关注云+社区