這篇文章將為大家詳細(xì)講解有關(guān)如何避免Node.js模塊日志污染程序日志,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司專注于石樓網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗。 熱誠為您提供石樓營銷型網(wǎng)站建設(shè),石樓網(wǎng)站制作、石樓網(wǎng)頁設(shè)計、石樓網(wǎng)站官網(wǎng)定制、重慶小程序開發(fā)公司服務(wù),打造石樓網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供石樓網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。
你是否有過這樣的經(jīng)歷,當(dāng)把 logging 添加到自定義 Node 模塊中,并認(rèn)為自己將會從這些額外信息中受益,卻發(fā)現(xiàn)當(dāng)你將模塊添加為依賴項并運(yùn)行 npm install
和 npm start
時,你的程序日志就會像下面嗎?
你如何找到自己實際需要的信息?比如都有哪些用戶登錄以及何時登錄,而不是來自應(yīng)用程序依賴項的信息:
同樣,當(dāng)你懷疑由于你的團(tuán)隊對 Node 模塊依賴項所做的更改而導(dǎo)致性能下降時,唯一需要解決的日志如下:
從全局來看,這是日志污染的樣子:
理想的日志記錄方案能夠使模塊日志不進(jìn)入程序或服務(wù)的日志記錄,但能夠在需要時將其打開以進(jìn)行故障排除。
為此,我將向你展示如何使用 debug 模塊來打開或關(guān)閉 Node 模塊中的日志。
如果你不需要它們,并且使用該模塊的服務(wù)運(yùn)行良好,則將其設(shè)置為 OFF。
ON 用于遇到問題并需要盡可能多的日志信息時。
debug
模塊概述在功能方面,請不要像通常在調(diào)試器中那樣來考慮調(diào)試模塊(就像你在 ID E中設(shè)置斷點(diǎn)的方式一樣),而應(yīng)更像是被修改后的 console
模塊。這是一種可讓你根據(jù)需要打開和關(guān)閉日志的工具。如果到其 GitHub頁面(https://github.com/visionmedi...),則還會看到它的其他各種功能,例如命名空間等。暫時不用管這些,現(xiàn)在只需要知道它是一種可以優(yōu)化你的生產(chǎn)環(huán)境的工具即可。
debug
讓我們來看一個在代碼中使用 debug
的例子。假設(shè)下面是一個模塊:
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'); });
實現(xiàn) debug
很容易。我們要做的就是 import 或 require 模塊,然后創(chuàng)建一個logger —— const log = debug('http:server');
。你只需將特定 logger 的標(biāo)記或命名空間 ‘http:server‘ 傳遞給 DEBUG
環(huán)境變量,以啟用調(diào)試功能即可。
啟動應(yīng)用程序時(即導(dǎo)入該模塊的程序),你將會像這樣去啟動它:
DEBUG=http:server node app-entrypoint.js
如果我們希望使用單獨(dú)的 logger 來切換某些日志怎么辦?例如,如果我們只想切換到 error 怎么辦?就像創(chuàng)建另一個 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
而且,當(dāng)你要記錄所有命名空間的日志時(在這種情況下,是 http:server
和 http:error
),只需傳遞通配符 *
即可。
DEBUG=http:* node app-entrypoint.js
讓我們看看這些日志現(xiàn)在是什么樣的:
然后,當(dāng)我們加載頁面時:
注意,debug
會寫入 stderr
而不是 stdout
,所以如果你有一個根據(jù)不同的來源提取日志的日志路由,這些調(diào)試日志將最終會存儲在 stderr 流中。
最后,你還可以選擇:
debug
編寫的模塊的日志。console.log()
/console.error()
記錄某些內(nèi)容,而另一些記錄 debug
如果你有必須要記錄的事項,并且與使用該模塊的應(yīng)用程序有關(guān),請用 console
將其記錄下來。但是如果你不這樣做,就會用 debug
記錄所有的內(nèi)容。
debug
到目前為止,如果你(或你的團(tuán)隊)編寫了該模塊,那么我們所介紹的內(nèi)容就很棒。
但是如果你用的是第三方模塊,那需要打開調(diào)試時該怎么辦?
也許你已經(jīng)對程序的各個部分進(jìn)行了故障排除,不夠現(xiàn)在假設(shè)你正在使用的開源模塊可能會讓你遇到問題。
好消息是,debug
是一個使用非常廣泛的模塊,npm 中的許多模塊可能都在用它。第三方模塊的創(chuàng)建者知道(至少,應(yīng)該知道)該模塊的用戶真的不希望默認(rèn)情況下進(jìn)行記錄,因為所有其他的日志都可能會變得雜亂無章。
由于 Express 內(nèi)部使用了 debug 模塊,所以如果你用了 Express 并需要對其進(jìn)行故障排除,則可以通過運(yùn)行以下命令打開日志:
DEBUG=express:* node your-app-entrypoint.js
debug
以及是如何使用的如果在文檔中沒有看到關(guān)于是否使用了 debug
的內(nèi)容該怎么辦? 即便如此,也有可能使用了該模塊,但是你必須進(jìn)行一些挖掘。
我們已經(jīng)知道 Express 文檔中描述了該如何使用它,但是我們假設(shè)它并沒有記錄在案:
首先,你可以在項目的 GitHub(或其他開放源代碼網(wǎng)站)上搜索 package.json
,然后查找其中列出的作為依賴項的模塊:
確認(rèn)后,你還需要確認(rèn) 1)實際正在使用中,以及 2)切換需要使用哪些標(biāo)志。 GitHub 現(xiàn)在具有一項不錯的功能,你可以在其中使用搜索欄搜索項目本身。如果我們在 Express 項目中搜索“debug”,則會發(fā)現(xiàn)以下內(nèi)容:
我們可以看到切換標(biāo)記為 “express”,因此 express:*
將為我們提供所有的日志,express:view
將為我們提供視圖的日志,等等。
關(guān)于如何避免Node.js模塊日志污染程序日志就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
當(dāng)前文章:如何避免Node.js模塊日志污染程序日志
標(biāo)題路徑:http://www.rwnh.cn/article12/jeecgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、響應(yīng)式網(wǎng)站、服務(wù)器托管
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)