代码调试有时是一项具有挑战性的任务。如果手边有一个调试工具,往往可以达到事半功倍的效果。得益于这些年的飞速发展,NodeJS生态中已经出现了多种调试工具。今年我们会分享几个常用的调试工具。在NodeJS代码调试中,通常有两种调试方式,一种是打印日志,一种是直接调试代码。现在让我们分别解释一下。日志可以帮助我们记录程序运行过程中的一些状态和错误信息。通过日志,我们可以很快的找到有问题的代码。例如,借助异常日志,我们可以快速定位到具体的代码行。调试模块debug是许多NodeJS包和框架使用的日志记录工具。这个包的好处是可以细粒度的控制以环境变量的形式打印哪些日志。例如,在下面的代码中,假设我们先发送一些请求,然后接收响应数据。//index.jsconstdebugHttpIncoming=require('debug')('http:incoming')constdebugHttpOutgoing=require('debug')('http:outgoing')letoutgoingRequest={url:'https://google.com'}//发送一些requestdebugHttpOutgoing('发送请求到%s',outgoingRequest.url)letincomingRequest={body:'{"status":"ok"}'}//servingsomerequestdebugHttpOutgoing('gotJSONbody%s',incomingRequest.body)当我们启动程序时如下方式:DEBUG=http:incoming,http:outgoingnodeindex.js日志显示如下:同时debug模块也支持*通配符,我们可以通过DEBUG=http:*nodeindex.js得到上面相同的日志输出。记录到文件通常,我们需要持久化应用程序运行的日志,最简单的方法就是记录到文件中。pino是一个高性能的日志记录模块,类似于bunyan,但性能更好。以下是几种日志模块的性能数据对比:benchWinston*10000:2226.117msbenchBunyan*10000:1355.229msbenchDebug*10000:445.291msbenchLogLevel*10000:322.181msbenchBole*10000:291.727msbenchPino*10000:269.109msbenchPinoExtreme*10000:102.239mspino使用非常简单:constpino=require('pino')()pino.info('hellopino')pino.info('theansweris%d',42)pino.error(newError('anerror'))aboveThecodeandthelogoutputareasfollows:{"level":30,"time":1632626946507,"pid":77749,"hostname":"everfind-MacBook-Pro.local","msg":"hellopino"}{"level":30,"time":1632626946508,"pid":77749,"hostname":"everfind-MacBook-Pro.local","msg":"theansweris42"}{"level":50,"time":1632626946508,"pid":77749,"hostname":"everfind-MacBook-Pro.local","stack":"Error:anerror\natObject.
