作者:CoreyCleary依赖并运行npminstall和npmstart,你的程序的日志是会不会像下面这样?你如何找到你真正需要的信息?例如哪些用户登录以及何时登录,而不是来自应用程序依赖项的信息:??此外,当您怀疑由于您的团队对Node模块依赖项所做的更改导致性能下降时,您需要处理的唯一日志如下所示:大图,这就是原木污染的样子:我们想要什么?一种理想的日志记录方案,可以防止模块日志记录到程序或服务中,但能够在需要时打开它们以进行故障排除。为此,我将向您展示如何使用调试模块打开或关闭Node模块中的日志记录。如果您不需要它们并且使用该模块的服务工作正常,请将其设置为OFF。ON用于遇到问题并需要尽可能多的日志信息。调试模块概述在功能方面,将调试模块想象成不像您通常在调试器中使用的那样(在IDE中设置断点的方式),而更像是一个修改过的控制台模块。这是一个允许您根据需要打开和关闭日志记录的工具。如果你去它的GitHub页面(https://github.com/visionmedi...),你还会看到它的各种其他功能,比如命名空间等。暂时忽略这些,只知道它是一个工具可以优化您的生产环境。在您自己的Node模块中实现调试让我们看一个在代码中使用调试的示例。假设以下是一个模块:constdebug=require('debug');constlog=debug('http:server');consthttp=require('http');constname='DebugAppfordebugmodule';日志('启动%o',名称);http.createServer((req,res)=>{log(req.method+''+req.url);res.end('调试示例\n');}).listen(3200,()=>{日志('听');});实施调试很容易。我们所要做的就是导入或要??求模块,然后创建一个记录器-constlog=debug('http:server');.您只需将特定记录器的标签或命名空间“http:server”传递给DEBUG环境变量即可启用调试。当启动应用程序(即导入此模块的程序)时,您将像这样启动它:DEBUG=http:servernodeapp-entrypoint.js如果我们想使用单独的记录器来切换某些日志怎么办?例如,如果我们只想切换到error怎么办?就像创建另一个记录器一样简单,就像这样:constdebug=require('debug');constlog=debug('http:server');consterrorLogger=debug('http:error');//在这里创建新的记录器,传递给它一个新的命名空间consthttp=require('http');constname='DebugAppfordebugmodule';日志('启动%o',名称);http.createServer((req,res)=>{log(req.method+''+req.url);res.end('hello\n');//伪造一个错误来演示使用http:error调试namespacesetTimeout(()=>{errorLogger('fakeerror');//然后调用记录器},1000);}).listen(3200,()=>{log('listening');});这将只打开错误:DEBUG=http:errornodeapp-entrypoint.js并且,当你想记录所有命名空间(在本例中为http:server和http:error)时,只需传递通配符*。DEBUG=http:*nodeapp-entrypoint.js现在让我们看看这些日志是什么样子的:然后,当我们加载页面时:注意debug写入stderr而不是stdout,所以如果你有一个源提取的日志路径最终将存储在stderr流中的日志。最后,您有一个选择:您可以记录所有使用调试编写的模块。或者,您仍然可以使用console.log()/console.error()来记录一些事情,而另一些则用于调试。如果你有一些必须记录的东西,并且它与使用这个模块的应用程序有关,请使用console记录。但如果你不这样做,一切都将通过调试记录下来。为第三方模块打开调试到目前为止,如果您(或您的团队)编写了该模块,我们所涵盖的内容就很棒了。但是如果你使用的是第三方模块,那么当你需要开启调试的时候怎么办呢?也许您已经对程序的各个部分进行了故障排除,现在仅仅假设您正在使用的开源模块可能会给您带来问题是不够的。好消息是debug是一个使用非常广泛的模块,可能npm中的许多模块都在使用它。第三方模块的创建者知道(至少应该知道)该模块的用户在默认情况下确实不希望记录日志,因为所有其他日志都会变得混乱。由于Express内部使用了debug模块,如果你使用Express需要排查问题,可以打开日志运行:DEBUG=express:*nodeyour-app-entrypoint.js查看是否使用了开源node模块调试已启用,如何使用?如果我在文档中没有看到关于是否使用调试怎么办?即便如此,也有可能使用了该模组,但您必须进行一些挖掘。我们已经知道如何在Express文档中描述了它的使用方法,但我们假设它没有记录:首先,您可以在项目的GitHub(或其他开源站点)上搜索package.json并查找作为依赖项的模块列表:确认后,还需要确认1)实际使用了哪些标志,2)需要使用哪些开关。GitHub现在有一个很好的功能,你可以使用搜索栏来搜索项目本身。如果我们在Express项目中搜索“debug”,我们会发现以下内容:我们可以看到toggle标记为“express”,因此express:*将为我们提供所有日志,而express:view将为我们提供视图的日志,ETC。总结希望你看到了在节点模块中实现调试并为3rd方模块打开它是多么容易,以及它如何帮助你清理日志,同时为你提供一种方便的方法来重新打开它以进行故障排除。
