欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node輸出日志的正確方法示例

 更新時(shí)間:2023年03月05日 14:34:04   作者:uniqueli  
這篇文章主要為大家介紹了Node輸出日志的正確方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

每個(gè)程序員都喜歡在有問(wèn)題的代碼中插入一些日志的方法來(lái)幫助調(diào)試程序,比如System.out.println或console.log。解決后,就會(huì)將這些語(yǔ)句刪除,周而復(fù)始。

但是通過(guò)系統(tǒng)日志輸出的日志格式都是這種:

// output
console.log("log"); // log
console.info("message"); // message
console.warn("Warning");// warning

現(xiàn)在想象一下,如果你在后端排查問(wèn)題時(shí),你有數(shù)百條這樣的信息。這樣的日志不僅很難知道消息級(jí)別或消息記錄的日期,而且過(guò)濾和排序日志也是一項(xiàng)艱巨的任務(wù)。

我們排查問(wèn)題時(shí),更期望看到這樣的日志:

{"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就是為了解決這個(gè)問(wèn)題而設(shè)計(jì)的。日志API的優(yōu)點(diǎn):

  • 可以很容易地取消全部日志記錄,或者僅僅取消某個(gè)級(jí)別以下的日志,而且可以很容易地再次打開(kāi)日志開(kāi)關(guān)。
  • 可以很簡(jiǎn)單的禁止日志記錄,因此,將這些日志代碼留在程序中的開(kāi)銷很小。
  • 日志記錄可以被定向到不同的處理器,如在控制臺(tái)、文件等等。
  • 日志記錄器和處理器都可以記錄進(jìn)行過(guò)濾,過(guò)濾器可以根據(jù)過(guò)濾器實(shí)現(xiàn)指定的標(biāo)準(zhǔn)丟棄那些無(wú)用的記錄。
  • 日志記錄可以采用不同的方式格式化,例如:純文本或JSON。
  • 應(yīng)用程序可以使用多個(gè)日志記錄器。
  • 日志系統(tǒng)的配置由配置文件控制。

在 Node.js 應(yīng)用中進(jìn)行日志記錄是非常重要的,因?yàn)樗梢詭椭覀兏檻?yīng)用程序中的問(wèn)題和錯(cuò)誤。接下來(lái)介紹 一下Node.js 的日志記錄技術(shù)。

使用 Winston 進(jìn)行日志記錄

Winston是一個(gè)流行的、功能豐富的、靈活的Node.js日志庫(kù)。它使用的默認(rèn)格式是JSON,但可以配置向多個(gè)存儲(chǔ)設(shè)備中發(fā)送日志,目前每周下載量接近1千萬(wàn)。

安裝和使用 Winston

要使用 Winston,首先需要安裝它??梢允褂?npm 安裝 Winston:

npm install winston

安裝完成后,在應(yīng)用程序中引入 Winston:

const winston = require('winston');

現(xiàn)在可以創(chuàng)建一個(gè) Winston 實(shí)例,并開(kāi)始記錄日志。以下是一個(gè)示例:

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!');

在上面的示例中,創(chuàng)建了一個(gè)名為 logger 的 Winston 實(shí)例。指定了日志級(jí)別為 info,表示只記錄等級(jí)為 info 或更高的日志消息。我們還指定了一個(gè) json 格式化器,以便記錄格式化的 JSON 日志消息。定義了兩個(gè)傳輸器,一個(gè)將日志消息記錄到控制臺(tái),另一個(gè)將錯(cuò)誤日志消息記錄到名為 error.log 的文件中。

Winston 的日志級(jí)別

Winston 支持多個(gè)日志級(jí)別,可以根據(jù)日志消息的嚴(yán)重程度選擇不同的日志級(jí)別來(lái)記錄。Winston 的日志級(jí)別從高到低分別為:

  • error:表示發(fā)生了錯(cuò)誤
  • warn:表示警告性的信息
  • info:表示常規(guī)信息
  • verbose:表示詳細(xì)信息
  • debug:表示調(diào)試信息
  • silly:表示無(wú)關(guān)緊要的信息

Winston 的格式化器

Winston 的格式化器可以幫助我們格式化日志消息,以便更好地組織和分析日志數(shù)據(jù)。Winston 提供了多個(gè)內(nèi)置的格式化器,例如 json、simple、prettyPrint 等。我們也可以自定義格式化器,根據(jù)自己的需求來(lái)記錄日志數(shù)據(jù)。

以下是一個(gè)使用 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 的傳輸器

Winston 支持多個(gè)傳輸器,可以將日志消息記錄到不同的目標(biāo)中,例如控制臺(tái)、文件、數(shù)據(jù)庫(kù)、syslog 等。以下是一個(gè)將日志消息記錄到文件中的示例:

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 的文件中。我們?cè)O(shè)置日志級(jí)別為 info,只記錄等級(jí)為 info 或更高的日志消息。

除了輸出到文件中,Winston還支持輸出控制臺(tái)、http請(qǐng)求以及流的方式。

我們也可以自定義輸出的方式,比如輸出到郵件、通過(guò)接口消息通知等等。

Winston的實(shí)踐

在實(shí)際使用過(guò)程中,我比較喜歡將console.log進(jìn)行一次封裝。將 console.log 綁定到 logger.info 方法。每次調(diào)用 console.log 時(shí),實(shí)際上是在調(diào)用 logger.info 方法。因此,日志消息將通過(guò)Winston的Console傳輸器發(fā)送到標(biāo)準(zhǔn)控制臺(tái)中和文件中。

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時(shí),指定新的文件名,方便后續(xù)的日志查看。
console.error = logger.error.bind(logger);

如果不在需要日志記錄時(shí),可以直接設(shè)置level為off,就可以停止日志的記錄。

接入es

日志輸出和日志格式解決之后,為了方便檢索和更快的排查問(wèn)題,可以將日志接入es。

下面是接入es后,通過(guò)kibana查看的結(jié)果:

將日志接入 Elasticsearch (ES) 的好處:

  • 快速檢索和分析:ES 是一種基于搜索引擎的分布式數(shù)據(jù)存儲(chǔ)和分析引擎,它提供了一種高效的方式來(lái)存儲(chǔ)和搜索大量的結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù)。通過(guò)將日志接入 ES,我們可以使用 ES 強(qiáng)大的搜索和聚合功能來(lái)快速檢索和分析日志數(shù)據(jù)。
  • 實(shí)時(shí)監(jiān)控:ES 支持實(shí)時(shí)數(shù)據(jù)索引和搜索,因此可以實(shí)時(shí)監(jiān)控應(yīng)用程序和系統(tǒng)的狀態(tài)和性能。通過(guò)將日志接入 ES,我們可以實(shí)時(shí)監(jiān)控應(yīng)用程序和系統(tǒng)的日志,并在出現(xiàn)異?;蝈e(cuò)誤時(shí)立即采取行動(dòng)。
  • 可視化和報(bào)告:ES 提供了一種靈活和強(qiáng)大的可視化和報(bào)告工具,可以將日志數(shù)據(jù)可視化為圖表、儀表板和報(bào)告等形式。通過(guò)將日志接入 ES,我們可以使用這些工具來(lái)生成可視化報(bào)告,并幫助我們更好地理解和優(yōu)化應(yīng)用程序和系統(tǒng)的性能。

注意事項(xiàng)

  • 日志級(jí)別,不要都使用info來(lái)使用,要區(qū)分不同的日志級(jí)別。
  • 日志的打印方式:同步和異步。
  • 日志體量的大小:LOG系統(tǒng)就是直接寫磁盤文件,既然寫磁盤文件就牽扯到磁盤IO,而磁盤IO跟內(nèi)存讀寫有一個(gè)數(shù)量級(jí)的性能差別。

以上就是Node輸出日志的正確方法示例的詳細(xì)內(nèi)容,更多關(guān)于Node輸出日志的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • nodejs關(guān)于中間件解析

    nodejs關(guān)于中間件解析

    這篇文章主要介紹了nodejs關(guān)于中間件解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • node.js實(shí)現(xiàn)微信JS-API封裝接口的示例代碼

    node.js實(shí)現(xiàn)微信JS-API封裝接口的示例代碼

    這篇文章主要介紹了node.js實(shí)現(xiàn)微信JS-API封裝接口的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09
  • 深入解讀Node.js中的koa源碼

    深入解讀Node.js中的koa源碼

    這篇文章主要介紹了深入解讀Node.js中的koa源碼,任何一個(gè)框架的出現(xiàn)都是為了解決問(wèn)題,而Koa則是為了更方便的構(gòu)建http服務(wù)而出現(xiàn)的。 可以簡(jiǎn)單的理解為一個(gè)HTTP服務(wù)的中間件框架。,需要的朋友可以參考下
    2019-06-06
  • Node.js進(jìn)階之核心模塊https入門

    Node.js進(jìn)階之核心模塊https入門

    在nodejs中,提供了 https 這個(gè)模塊來(lái)完成 HTTPS 相關(guān)功能。這篇文章主要介紹了Node.js進(jìn)階之核心模塊https入門,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • 使用GruntJS構(gòu)建Web程序之合并壓縮篇

    使用GruntJS構(gòu)建Web程序之合并壓縮篇

    前一篇講述了如何使用concat和uglify命令實(shí)現(xiàn)JavaScript資源的合并,壓縮。這篇講述下css資源的合并和壓縮。
    2014-06-06
  • Node中完整的?node?addon?實(shí)現(xiàn)流程

    Node中完整的?node?addon?實(shí)現(xiàn)流程

    這篇文章主要介紹了Node中完整的node?addon實(shí)現(xiàn)流程,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 簡(jiǎn)單實(shí)現(xiàn)node.js圖片上傳

    簡(jiǎn)單實(shí)現(xiàn)node.js圖片上傳

    這篇文章主要為大家詳細(xì)介紹了node.js圖片上傳的簡(jiǎn)單實(shí)現(xiàn)代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解

    window系統(tǒng) nodejs安裝opencv環(huán)境配置圖文詳解

    這篇文章主要介紹了window系統(tǒng) nodejs安裝opencv環(huán)境配置,結(jié)合圖文形式詳細(xì)分析了window環(huán)境下 nodejs安裝opencv的具體步驟、注意事項(xiàng)
    2023-04-04
  • 詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件

    詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件

    這篇文章主要介紹了詳解使用Node.js 將txt文件轉(zhuǎn)為Excel文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • Node.js使用Express創(chuàng)建Web項(xiàng)目詳細(xì)教程

    Node.js使用Express創(chuàng)建Web項(xiàng)目詳細(xì)教程

    如果需要入門使用node.js進(jìn)行web開(kāi)發(fā),正在學(xué)習(xí) nodejs web開(kāi)發(fā)指南 的和想快速了解node.js web開(kāi)發(fā)模式的朋友,相信本文是有一定幫助意義的。
    2017-03-03

最新評(píng)論