9 個 Node.js 記錄器庫,您可以嘗試獲得更好的記錄

已發表: 2022-09-01

您是否正在為調試代碼而苦苦掙扎? 您是否正在尋找一些可能使調試更容易的日誌記錄解決方案? 請繼續閱讀以了解更多信息。

軟件開發經歷了幾個階段:需求收集、分析、編碼、測試和維護。 在所有這些階段中,編碼/開發階段需要大量時間和精力。 軟件工程師處理語法錯誤、邏輯錯誤和運行時錯誤。 語法錯誤是在編譯時識別出來的,並且由於代碼不遵守編程語言的規則而發生。

另一方面,集成開發環境 (IDE) 無法識別邏輯和運行時錯誤,並且通常難以調試和修復。 解決錯誤是一個耗時的過程,需要大量的調試。

調試是一個試圖理解為什麼編寫的代碼沒有按預期工作的過程。 當我們知道錯誤以及代碼中發生錯誤的確切行時,很容易解決問題。 因此,日誌記錄對於調試代碼非常有用。

什麼是日誌記錄?

日誌記錄是一種在程序執行期間捕獲消息的技術。 必須只記錄那些消息,這可以幫助他們進行調試。 因此,知道何時將日誌語句添加到代碼中非常重要。 此外,區分日誌語句同樣重要。 日誌記錄有不同的級別,例如信息、警告、錯誤、調試和詳細。 錯誤和警告語句用於異常處理。

從函數返回的數據、數組操作後的結果、從 API 檢索的數據等,都是可以使用 info 語句記錄的數據的一些示例。 調試和詳細日誌用於給出錯誤的詳細描述。

調試日誌提供有關堆棧跟踪、輸入輸出參數等的信息。“詳細”不如“調試”日誌詳細,但提供了所有已發生事件的列表。 日誌被寫入控制台、文件和輸出流。 日誌管理工具可用於結構化和格式化的日誌記錄。

Node.js 日誌記錄

Nodejs 是一個 JavaScript 運行時環境。 Node.js 應用程序是異步和非阻塞的,用於數據密集型和實時系統。 了解更多關於 Node.js 的最佳方式是閱讀 Node.js 教程及其文檔。 日誌記錄是提高性能、故障排除和錯誤跟踪所必需的。 可以使用內置函數 console.log 登錄 Node.js。 此外,調試功能與多個軟件包相互關聯,可以有效使用。

中間件用於管理請求和響應。 中間件可以是應用程序或任何其他 Javascript 框架。 可以通過應用程序和路由器登錄中間件。 任何 Node.js 記錄器都必須使用 npm 或 yarn install 命令來安裝記錄器。

Npm 代表“Node Package Manager”,YARN 代表“Yet Another Resource Negotiator”。 然而,Yarn 比 npm 更受歡迎,因為它更快並且可以並行安裝包。

下面列出了一些最好的 Node.js 記錄器:

皮諾

Pino 是一個庫,它是 Node.js 應用程序的最佳記錄器之一。 它是開源的,速度極快,並以易於閱讀的 JSON 格式記錄語句。 一些 Pino 日誌級別是 - 調試、警告、錯誤和信息消息。 項目中可以導入一個 Pino logger 實例,console.log 語句必須替換為 logger.info 語句。

Youtube 視頻

使用以下命令安裝 Pino:

 $ npm install pino

生成的日誌是詳盡的,採用 JSON 格式,突出顯示日誌的行號、日誌類型、記錄時間等。Pino 將應用程序中的日誌記錄開銷降至最低,並且在處理日誌時非常靈活。

Pino 可以與 Hapi、Restify、Express 等 Web 框架集成。Pino 生成的日誌也可以存儲在文件中。 它使用 Worker 線程進行操作,並且與 TypeScript 兼容。

溫斯頓

Winston 支持各種 Web 框架的日誌記錄,主要關注靈活性和可擴展性。 它支持多種傳輸方式,可以將日誌存儲在不同的文件位置。 傳輸是存儲日誌消息的地方。

除了一些內置的傳輸,如 Http、Console、File 和 Stream,它還支持其他傳輸,如 Cloud watch 和 MongoDB。 它在各種級別和格式下進行日誌記錄。 日誌記錄級別指示問題的嚴重性。

Youtube 視頻

各種日誌記錄級別如下所示:

 { error: 0, warn: 1, info: 2, http: 3, verbose: 4, debug: 5, silly: 6 }

日誌輸出格式也可以自定義、過濾和組合。 日誌包括有關時間戳、與日誌關聯的標籤、從前一個日誌經過的毫秒數等信息。

Winston 還處理異常和未捕獲的承諾。 它提供了額外的功能,例如查詢運行時歸檔、流式日誌等。首先,必須安裝 Winston。 然後,創建一個 Winston 配置對像以及傳輸,用於存儲日誌。 使用 createLogger() 函數創建一個記錄器對象,並將日誌消息傳遞給它。

節點班揚

Bunyan 用於以 JSON 格式快速登錄 node.js。 它還提供了用於查看日誌的 CLI(命令行界面)工具。 它是輕量級的,支持各種運行時環境,如 Node.js、Browserify、WebPack 和 NW.js。 使用漂亮的打印功能進一步美化了日誌的 JSON 格式。 日誌有致命、錯誤、警告、信息、調試和跟踪等各種級別; 每個都與一個數值相關聯。

記錄高於為實例設置的級別的所有級別。 Bunyan 流是記錄輸出的地方。 可以使用 log.child() 函數記錄應用程序的子組件。 所有子記錄器都綁定到特定的父應用程序。 流類型可以是文件、旋轉文件、原始數據等。定義流的代碼示例如下所示:

 var bunyan = require('bunyan'); var log = bunyan.createLogger({ name: "foo", streams: [ { stream: process.stderr, level: "debug" }, ... ] });

Bunyan 還支持 DTrace 日誌記錄。 DTrace 日誌記錄涉及的探針包括 log-trace、log-warn、log-error、log-info、log-debug 和 log-fatal。 Bunyan 使用序列化程序以 JSON 格式生成日誌。 序列化程序函數不會拋出異常並且是防禦性的。

日誌級別

Loglevel 用於登錄 Javascript 應用程序。 它也是 Node.js 最好的記錄器之一,因為它輕量級且簡單。 它記錄給定的級別並使用一個不依賴於日誌記錄的文件。 默認日誌級別為“警告”。 日誌輸出與行號一起格式化。 用於記錄的一些方法是跟踪、調試、警告、錯誤和信息。

他們在任何環境中都能適應失敗。 getLogger() 是用於檢索記錄器對象的方法。 它也可以與其他插件組合以擴展其功能。 一些插件包括 loglevel-plugin-prefix、loglevel-plugin-remote、ServerSend 和 DEBUG。 將前綴消息添加到日誌記錄的插件如下所示:

 var originalFactory = log.methodFactory; log.methodFactory = function (methodName, logLevel, loggerName) { var rawMethod = originalFactory(methodName, logLevel, loggerName); return function (message) { rawMethod("Newsflash: " + message); }; }; log.setLevel(log.getLevel()); // Be sure to call setLevel method in order to apply plugin

構建使用 npm run dist 命令運行,測試可以使用 npm test 命令運行。 日誌級別支持 Webjar、Bower 和 Atmosphere 包。 每當添加新功能時,都會發布新版本的 Loglevel。

信號

Signale 由 19 個用於 Javascript 應用程序的記錄器組成。 它支持 TypeScript 和範圍日誌記錄。 它由幫助記錄時間戳、數據和文件名的計時器組成。 除了 await、complete、fatal、fav、info 等 19 個記錄器之外,還可以創建自定義日誌。

通過使用記錄器數據定義 JSON 對象和字段來創建自定義日誌。 還可以創建交互式記錄器。 當交互式記錄器設置為 true 時,來自交互式記錄器的新值會覆蓋舊值。

Signale 最好的部分是過濾掉秘密或敏感信息的能力。 多個秘密存儲在一個數組中。 addSecrets() 和 clearSecrets() 是用於添加和清除數組中的秘密的函數。 Boostnote、Docz、Shower、Taskbook 和 Vant 使用 Signale 進行日誌記錄。 從 Signale 調用 API 的語法如下:

 signale.<logger>(message[,message]|messageObj|errorObj)

在撰寫本文時,Signale 的下載量已超過 100 萬次。

示踪劑

Tracer 用於生成詳細的日誌記錄消息。 記錄消息由時間戳、文件名、行號和方法名組成。 可以安裝幫助程序包來自定義輸出日誌格式。 可以使用以下命令安裝幫助程序包。

 npm install -dev tracer

Tracer 支持文件、流和 MongoDB 傳輸。 它支持日誌中的顏色控制台和過濾條件。 最初,必須使用 npm install 安裝跟踪器。 其次,必須創建一個記錄器對象,並且必須選擇控制台類型。 然後,可以在對像上指定各種日誌級別或類型以進行進一步的日誌記錄。

自定義過濾器可以通過定義與函數體中存在的業務邏輯的同步函數來創建。 tinytim 等微模板也可用於系統日誌記錄。

小屋.js

Cabin 用於 node.js 應用程序的服務器和客戶端日誌記錄。 它用於需要屏蔽敏感和關鍵信息的地方。 這包括信用卡號、BasicAuth 標頭、鹽、密碼、CSRF 令牌和銀行帳號。 下面的代碼片段顯示了使用 Cabin.js 進行日誌記錄。

 const Cabin = require('cabin'); const cabin = new Cabin(); cabin.info('hello world'); cabin.error(new Error('oops!'));

它由 1600 多個字段名稱組成。 它還遵循自帶記錄器 (BYOL) 的原則。 這使其與 Axe、Pino、Bunyan、Winston 等各種其他記錄器兼容。由於自動流和 Cabin 緩衝區,它降低了磁盤中的存儲成本。 它是跨平台兼容的並且易於調試。

服務器端日誌記錄需要使用中間件進行路由和自動輸出日誌記錄。 瀏覽器端日誌記錄需要 XHR 請求和腳本。 它使用 Ax 來顯示元數據,即有關數據、堆棧跟踪和其他錯誤的數據。 SHOW_STACK 和 SHOW_META 是布爾變量,設置為 true 或 false 以顯示或隱藏堆棧跟踪和元數據。

日誌

Npmlog 是 npm 使用的一種基本類型的記錄器。 使用的一些日誌記錄方法是 level、record、maxRecordSize、prefixStyle、heading 和 stream。 它還支持彩色日誌記錄。 各種日誌記錄級別是 silly、verbose、info、warn、http 和 error。 使用 npm 日誌的示例代碼片段如下所示。

 var log = require('npmlog') // additional stuff ---------------------------+ // message ----------+ | // prefix ----+ | | // level -+ | | | // vvvv log.info('fyi', 'I have a kitty cat: %j', myKittyCat)

如果將“Infinity”指定為日誌級別,則會抑制所有消息。 如果將“-Infinity”指定為日誌級別,則必須啟用查看日誌消息的選項才能查看日誌。

事件和消息對像用於記錄。 使用前綴事件時會發出前綴消息。 樣式對像用於格式化日誌,例如為文本和背景添加顏色,字體樣式如粗體、斜體、下劃線等。一些 npm 日誌包是 brolog、npmlogger、npmdate log 等。

咆哮

Roarr 是 Node.js 的記錄器,不需要初始化並生成結構化數據。 它有 CLI 和環境變量。 它與瀏覽器兼容。 可以和Fastify、Fastify、Elastic Search等集成,可以區分應用代碼和依賴代碼。 每條日誌消息都由上下文、消息、序列、時間和版本組成。 各種日誌級別包括跟踪、調試、信息、警告、錯誤和致命。 關於如何完成日誌記錄的示例代碼片段是 Roarr,如下所示:

 import { ROARR, } from 'roarr'; ROARR.write = (message) => { console.log(JSON.parse(message)); };

此外,可以對錯誤進行序列化,這意味著可以將帶有錯誤的實例與對象的上下文一起記錄下來。 一些特定於 Node.js 和 Roarr 的環境變量是 ROARR_LOG 和 ROARR_STREAM。 “採用”是一個與 node.js 一起使用的函數,用於將上下文屬性傳遞到各個級別。 在記錄時,子函數也可以與中間件一起使用。

最後的話

日誌記錄是一種在程序執行期間跟踪各種活動和事件的方法。 日誌在代碼調試中起著至關重要的作用。 它還有助於提高代碼的可讀性。 Node.js 是一個開源的 javascript 運行時環境。 一些最好的 Node.js 記錄器是 Pino、Winston、Bunyan、Signale、Tracer、Npmlog 等。每種類型的記錄器都有自己的功能,例如分析、過濾、流式傳輸和傳輸。

有些記錄器支持彩色控制台,有些則適合處理敏感信息。 詳細和格式化的日誌在開發人員嘗試修復代碼中的錯誤時為他們提供了最大的幫助。 JSON 格式通常是日誌記錄的首選,因為它以鍵值對的形式記錄數據,使其對用戶友好。

記錄器還可以與其他應用程序集成,並且與多瀏覽器兼容。 在選擇要使用的記錄器類型之前,始終建議先了解您正在構建的需求和應用程序。

您還可以查看如何在 Windows 和 macOS 上安裝 Node.js 和 NPM。