目錄
我們想要什麼
为第三方模块打开 debug
查看开源 node 模块是否使用了 debug 以及是如何使用的
总结
首頁 web前端 js教程 使用Node.js 'debug”模組避免日誌污染應用程式日誌

使用Node.js 'debug”模組避免日誌污染應用程式日誌

Sep 27, 2020 pm 01:52 PM
debug node.js 紀錄 模組

本篇文章為大家介紹一下使用Node.js “debug”模組避免日誌污染應用程式日誌的方法。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

使用Node.js 'debug”模組避免日誌污染應用程式日誌

影片教學推薦:nodejs 教學 

你有沒有這樣的經歷,當把logging加入自訂Node 模組中,並認為自己將會從這些額外資訊中受益,卻發現當你將模組加入為依賴項並執行npm installnpm start 時,你的程式日誌就會像下面嗎?

使用Node.js debug”模組避免日誌污染應用程式日誌

你要如何找到自己實際需要的資訊?例如都有哪些用戶登入以及何時登錄,而不是來自應用程式依賴項的資訊:

使用Node.js debug”模組避免日誌污染應用程式日誌

同樣,當你懷疑由於你的當團隊對Node 模組相依性所做的變更而導致效能下降時,唯一需要解決的日誌如下:

使用Node.js debug”模組避免日誌污染應用程式日誌

從全域來看,這是日誌污染的樣子:

使用Node.js debug”模組避免日誌污染應用程式日誌

我們想要什麼

理想的日誌記錄方案能夠讓模組日誌不進入程式或服務的日誌記錄,但能夠在需要時將其打開以進行故障排除。

為此,我將向你展示如何使用 debug 模組來開啟或關閉 Node 模組中的日誌。

如果你不需要它們,並且使用該模組的服務運作良好,則將其設定為 OFF

ON 用於遇到問題並需要盡可能多的日誌資訊時。

debug 模組概述

在功能方面,請不要像通常在偵錯器中那樣來考慮偵錯模組(就像你在ID E中設定斷點的方式一樣),而應更像是被修改後的console 模組。這是一種可讓你根據需要打開和關閉日誌的工具。如果到其 GitHub頁面(https://github.com/visionmedi...),則也會看到它的其他各種功能,例如命名空間等。暫時不用管這些,現在只需要知道它是一種可以優化你的生產環境的工具。

在你自己的 Node 模組中實作debug

讓我們來看一個在程式碼中使用 debug 的範例。假設下面是一個模組:

const debug = require('debug');
const log = debug('http:server');
const http = require('http');
const name = 'Demo App for debug module';
 
log('booting %o', name);
 
http.createServer((req, res) => {
  log(req.method + ' ' + req.url);
  res.end('debug example\n');
}).listen(3200, () => {
  log('listening');
});
登入後複製

實作 debug 很容易。我們要做的就是 import 或 require 模組,然後建立一個logger —— const log = debug('http:server'); 。你只需將特定 logger 的標記或命名空間  ‘http:server‘ 傳遞給 DEBUG 環境變量,以啟用偵錯功能。

啟動應用程式時(即導入該模組的程式),你將會像這樣去啟動它:

DEBUG=http:server node app-entrypoint.js
登入後複製

如果我們希望使用單獨的logger 來切換某些日誌怎麼辦?例如,如果我們只想切換到 error 怎麼辦?就像建立另一個 logger 一樣簡單,就像這樣:

const debug = require('debug');
const log = debug('http:server');
const errorLogger = debug('http:error'); // create new logger here, passing it a new namespace
const http = require('http');
const name = 'Demo App for debug module';
 
log('booting %o', name);
 
http.createServer((req, res) => {
  log(req.method + ' ' + req.url);
  res.end('hello\n');
 
  // fake an error to demonstrate using debug for http:error namespace
  setTimeout(() => {
    errorLogger('fake error'); // then call the logger 
  }, 1000);
}).listen(3200, () => {
  log('listening');
});
登入後複製

如下所示將會只開啟錯誤:

##

DEBUG=http:error node app-entrypoint.js
登入後複製

而且,当你要记录所有命名空间的日志时(在这种情况下,是 http:serverhttp:error),只需传递通配符 * 即可。

DEBUG=http:* node app-entrypoint.js
登入後複製

让我们看看这些日志现在是什么样的:

使用Node.js debug”模組避免日誌污染應用程式日誌

然后,当我们加载页面时:

使用Node.js debug”模組避免日誌污染應用程式日誌

注意,debug 会写入 stderr 而不是 stdout,所以如果你有一个根据不同的来源提取日志的日志路由,这些调试日志将最终会存储在 stderr 流中。

最后,你还可以选择:

  • 你可以记录所有用 debug 编写的模块的日志。
  • 或者,你仍然可以用 console.log()/console.error() 记录某些内容,而另一些记录 debug

如果你有必须要记录的事项,并且与使用该模块的应用程序有关,请用 console 将其记录下来。但是如果你不这样做,就会用 debug 记录所有的内容。

为第三方模块打开 debug

到目前为止,如果你(或你的团队)编写了该模块,那么我们所介绍的内容就很棒。

但是如果你用的是第三方模块,那需要打开调试时该怎么办?

也许你已经对程序的各个部分进行了故障排除,不够现在假设你正在使用的开源模块可能会让你遇到问题。

好消息是,debug 是一个使用非常广泛的模块,npm 中的许多模块可能都在用它。第三方模块的创建者知道(至少,应该知道)该模块的用户真的不希望默认情况下进行记录,因为所有其他的日志都可能会变得杂乱无章。

由于 Express 内部使用了 debug 模块,所以如果你用了 Express 并需要对其进行故障排除,则可以通过运行以下命令打开日志:

DEBUG=express:* node your-app-entrypoint.js
登入後複製

查看开源 node 模块是否使用了 debug 以及是如何使用的

如果在文档中没有看到关于是否使用了 debug 的内容该怎么办? 即便如此,也有可能使用了该模块,但是你必须进行一些挖掘。

我们已经知道 Express 文档中描述了该如何使用它,但是我们假设它并没有记录在案:

首先,你可以在项目的 GitHub(或其他开放源代码网站)上搜索 package.json,然后查找其中列出的作为依赖项的模块:

使用Node.js debug”模組避免日誌污染應用程式日誌

确认后,你还需要确认 1)实际正在使用中,以及 2)切换需要使用哪些标志。 GitHub 现在具有一项不错的功能,你可以在其中使用搜索栏搜索项目本身。如果我们在 Express 项目中搜索“debug”,则会发现以下内容

使用Node.js debug”模組避免日誌污染應用程式日誌

我们可以看到切换标记为 “express”,因此 express:* 将为我们提供所有的日志,express:view 将为我们提供视图的日志,等等。

总结

希望你看到在 node 模块中实现 debug 并为第三方模块打开它是多么容易,以及它可以怎样帮你清理日志,同时又为你提供了一种方便的方法来将其重新打开进行故障排除。

英文原文地址:https://www.coreycleary.me/using-the-debug-module-to-avoid-polluting-your-application-logs-with-logs-from-node-modules/

作者:Corey Cleary

更多编程相关知识,可访问:编程入门!!

以上是使用Node.js 'debug”模組避免日誌污染應用程式日誌的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

win10的事件ID 6013是什麼? win10的事件ID 6013是什麼? Jan 09, 2024 am 10:09 AM

win10的日誌可以幫助使用者詳細的了解系統使用情況,很多的使用者在尋找自己的管理日誌的時候,一定都遇到過日誌6013吧,那麼這個程式碼的意思是什麼呢,下面就來介紹一下。 win10日誌6013是什麼:1.這個是正常的日誌。這個日誌的資訊並不是表示你的電腦重啟了,而是說明自從上次啟動以來,系統運行了多長的時間了。日誌會每天12點整出現一次。如何查看系統運作多久了,可以在cmd中輸入systeminfo。其中有一行就是。

WLAN擴充模組已停止[修復] WLAN擴充模組已停止[修復] Feb 19, 2024 pm 02:18 PM

如果您的Windows電腦上的WLAN擴充模組出現問題,可能會導致您與網際網路中斷連線。這種情況常常讓人感到困擾,但幸運的是,本文提供了一些簡單的建議,可以幫助您解決這個問題,讓您的無線連線重新正常運作。修復WLAN擴充模組已停止如果您的Windows電腦上的WLAN可擴充性模組已停止運作,請依照下列建議進行修復:執行網路和Internet故障排除程式停用並重新啟用無線網路連線重新啟動WLAN自動設定服務修改電源選項修改高級電源設定重新安裝網路適配器驅動程式運行一些網路命令現在,讓我們來詳細看

WLAN可擴充性模組無法啟動 WLAN可擴充性模組無法啟動 Feb 19, 2024 pm 05:09 PM

本文詳細介紹了解決事件ID10000的方法,該事件表明無線區域網路擴充模組無法啟動。在Windows11/10PC的事件日誌中可能會顯示此錯誤。 WLAN可擴充性模組是Windows的一個元件,允許獨立硬體供應商(IHV)和獨立軟體供應商(ISV)為使用者提供客製化的無線網路特性和功能。它透過增加Windows預設功能來擴充本機Windows網路元件的功能。在作業系統載入網路元件時,WLAN可擴充性模組會作為初始化的一部分啟動。如果無線區域網路擴充模組遇到問題無法啟動,您可能會在事件檢視器的日誌中看到錯誤消

解決Win10中的事件7034錯誤日誌問題 解決Win10中的事件7034錯誤日誌問題 Jan 11, 2024 pm 02:06 PM

win10的日誌可以幫助用戶詳細的了解系統使用情況,很多的用戶在尋找自己的管理日誌的時候,肯定都看到過很多的錯誤日誌吧,那麼該怎麼解決他們呢,下面就一起來看看吧。 win10日誌事件7034怎麼解決:1、點擊“開始”打開“控制面板”2、找到“管理工具”3、點擊“服務”4、找到HDZBCommServiceForV2.0右鍵“停止服務”,並改為“手動啟動」

如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 Nov 29, 2023 pm 08:46 PM

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

Linux系統查看log日誌指令詳解! Linux系統查看log日誌指令詳解! Mar 06, 2024 pm 03:55 PM

在Linux系統中,可以使用下列指令來查看日誌檔案的內容:tail指令:tail指令用來顯示日誌檔案的末尾內容。它是查看最新日誌資訊的常用命令。 tail[選項][檔案名稱]常用的選項包括:-n:指定要顯示的行數,預設為10行。 -f:即時監視文件內容,並在文件更新時自動顯示新的內容。範例:tail-n20logfile.txt#顯示logfile.txt檔案的最後20行內容tail-flogfile.txt#即時監視logfile.txt檔案的更新內容head指令:head指令用於顯示記錄檔的開頭

Ansible運作方式詳解 Ansible運作方式詳解 Feb 18, 2024 pm 05:40 PM

Ansible工作原理從上面的圖可以了解到:管理端支援local、ssh、zeromq三種方式連接被管理端,預設使用基於ssh的連接,這部分對應上面架構圖中的連接模組;可以按應用類型等方式進行HostInventory(主機清單)分類,管理節點透過各類模組實現對應的操作,單一模組,單一指令的批次執行,我們可以稱為ad-hoc;管理節點可以透過playbooks實作多個task的集合實作一類功能,如web服務的安裝部署、資料庫伺服器的批次備份等。 playbooks我們可以簡單的理解為,系統透過

Ansible Ad-Hoc(點對點模式) Ansible Ad-Hoc(點對點模式) Feb 18, 2024 pm 04:48 PM

官方文件:https://docs.ansible.com/ansible/latest/command_guide/intro_adhoc.html簡介Ad-hoc命令是一種臨時輸入並執行的命令,通常用於測試和調試。它們不需要永久保存,簡單來說,ad-hoc就是「即時命令」。常用模組1、command模組(預設模組)預設模組,沒有shell強大,基本上shell模組都可以支援command模組的功能。 【1】幫助ansible-doccommand#推薦使用下面這個ansible-doccomm

See all articles