您好,登錄后才能下訂單哦!
本篇內容主要講解“Node輸出日志的正確方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Node輸出日志的正確方法是什么”吧!
每個程序員都喜歡在有問題的代碼中插入一些日志的方法來幫助調試程序,比如System.out.println或console.log。解決后,就會將這些語句刪除,周而復始。
但是通過系統日志輸出的日志格式都是這種:
// output console.log("log"); // log console.info("message"); // message console.warn("Warning");// warning
現在想象一下,如果你在后端排查問題時,你有數百條這樣的信息。這樣的日志不僅很難知道消息級別或消息記錄的日期,而且過濾和排序日志也是一項艱巨的任務。
我們排查問題時,更期望看到這樣的日志:
{"level":"error","message":"Error message","timestamp":"2022-09-20T11:39:33.953Z"}
{"level":"warn","message":"Warning message","timestamp":"2022-09-20T11:39:33.957Z"}
{"level":"info","message":"Info message","timestamp":"2022-09-20T11:39:33.957Z"}
日志API就是為了解決這個問題而設計的。日志API的優點:
可以很容易地取消全部日志記錄,或者僅僅取消某個級別以下的日志,而且可以很容易地再次打開日志開關。
可以很簡單的禁止日志記錄,因此,將這些日志代碼留在程序中的開銷很小。
日志記錄可以被定向到不同的處理器,如在控制臺、文件等等。
日志記錄器和處理器都可以記錄進行過濾,過濾器可以根據過濾器實現指定的標準丟棄那些無用的記錄。
日志記錄可以采用不同的方式格式化,例如:純文本或JSON。
應用程序可以使用多個日志記錄器。
日志系統的配置由配置文件控制。
在 Node.js 應用中進行日志記錄是非常重要的,因為它可以幫助我們跟蹤應用程序中的問題和錯誤。接下來介紹 一下Node.js 的日志記錄技術。
Winston是一個流行的、功能豐富的、靈活的Node.js日志庫。它使用的默認格式是JSON,但可以配置向多個存儲設備中發送日志,目前每周下載量接近1千萬。
要使用 Winston,首先需要安裝它。可以使用 npm 安裝 Winston:
npm install winston
安裝完成后,在應用程序中引入 Winston:
const winston = require('winston');
現在可以創建一個 Winston 實例,并開始記錄日志。以下是一個示例:
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [ new winston.transports.Console(), new winston.transports.File({ filename: 'error.log', level: 'error' }) ] }); logger.info('Hello, world!');
在上面的示例中,創建了一個名為 logger 的 Winston 實例。指定了日志級別為 info,表示只記錄等級為 info 或更高的日志消息。我們還指定了一個 json 格式化器,以便記錄格式化的 JSON 日志消息。定義了兩個傳輸器,一個將日志消息記錄到控制臺,另一個將錯誤日志消息記錄到名為 error.log 的文件中。
Winston 支持多個日志級別,可以根據日志消息的嚴重程度選擇不同的日志級別來記錄。Winston 的日志級別從高到低分別為:
error:表示發生了錯誤
warn:表示警告性的信息
info:表示常規信息
verbose:表示詳細信息
debug:表示調試信息
silly:表示無關緊要的信息
Winston 的格式化器可以幫助我們格式化日志消息,以便更好地組織和分析日志數據。Winston 提供了多個內置的格式化器,例如 json、simple、prettyPrint 等。我們也可以自定義格式化器,根據自己的需求來記錄日志數據。
以下是一個使用 json 格式化器記錄日志的示例:
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.json(), transports: [new winston.transports.Console()] }); logger.info({ message: 'Hello, world!', user: 'Alice' });
Winston 支持多個傳輸器,可以將日志消息記錄到不同的目標中,例如控制臺、文件、數據庫、syslog 等。以下是一個將日志消息記錄到文件中的示例:
const winston = require('winston'); const logger = winston.createLogger({ level: 'info', format: winston.format.simple(), transports: [ new winston.transports.File({ filename: 'app.log' }) ] }); logger.info('Hello, world!');
在上面的示例中,我們使用 File 傳輸器將日志消息記錄到名為 app.log 的文件中。我們設置日志級別為 info,只記錄等級為 info 或更高的日志消息。
除了輸出到文件中,Winston還支持輸出控制臺、http請求以及流的方式。
我們也可以自定義輸出的方式,比如輸出到郵件、通過接口消息通知等等。
在實際使用過程中,我比較喜歡將console.log進行一次封裝。將 console.log 綁定到 logger.info 方法。每次調用 console.log 時,實際上是在調用 logger.info 方法。因此,日志消息將通過Winston的Console傳輸器發送到標準控制臺中和文件中。
const winston = require('winston'); const logger = winston.createLogger({ transports: [ new winston.transports.Console(), new winston.transports.File() ] }); // 將 console.log 綁定到 logger.info 方法 console.log = logger.info.bind(logger); // 使用 console.log 記錄日志消息 console.log('Hello, Winston!'); console.log('This is a log message.'); // error 也可以綁定到logger上,但是建議輸出file時,指定新的文件名,方便后續的日志查看。 console.error = logger.error.bind(logger);
如果不在需要日志記錄時,可以直接設置level為off,就可以停止日志的記錄。
日志輸出和日志格式解決之后,為了方便檢索和更快的排查問題,可以將日志接入es。
下面是接入es后,通過kibana查看的結果:
將日志接入 Elasticsearch (ES) 的好處:
快速檢索和分析:ES 是一種基于搜索引擎的分布式數據存儲和分析引擎,它提供了一種高效的方式來存儲和搜索大量的結構化和非結構化數據。通過將日志接入 ES,我們可以使用 ES 強大的搜索和聚合功能來快速檢索和分析日志數據。
實時監控:ES 支持實時數據索引和搜索,因此可以實時監控應用程序和系統的狀態和性能。通過將日志接入 ES,我們可以實時監控應用程序和系統的日志,并在出現異常或錯誤時立即采取行動。
可視化和報告:ES 提供了一種靈活和強大的可視化和報告工具,可以將日志數據可視化為圖表、儀表板和報告等形式。通過將日志接入 ES,我們可以使用這些工具來生成可視化報告,并幫助我們更好地理解和優化應用程序和系統的性能。
日志級別,不要都使用info來使用,要區分不同的日志級別。
日志的打印方式:同步和異步。
日志體量的大小:LOG系統就是直接寫磁盤文件,既然寫磁盤文件就牽扯到磁盤IO,而磁盤IO跟內存讀寫有一個數量級的性能差別。
到此,相信大家對“Node輸出日志的正確方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。