NodeJS 后端開發 08 使用log4js打日志

      網友投稿 925 2025-04-02

      NodeJS 后端開發 08 使用log4js打日志


      日志是什么?

      像記日記一樣,日志是通過程序打印出來的,記錄程序內部何時何處發生了什么事件。

      本文只為使用學習為主,想對日志管理和分析有更深認識的可以看 => 日志原理與開發分析這篇完全指南就夠了!適應各種規模

      我們也用過console.log來打印一些調試信息,有什么區別呢?請讀者帶著這個問題往下讀。

      先安裝

      我們這里先安裝一個日志的模快。

      打開終端執行下面命令:

      npm install log4js

      基本使用

      const log4js = require('log4js') var logger = log4js.getLogger('雷學委開發日常') logger.level = 'info' logger.info('早上起床') logger.info('擁抱太陽') logger.info('吃完早餐') logger.info('充滿希望') logger.info('開始了代碼的一天')

      保存上面代碼為demo-fun.js ,然后運行:

      NodeJS 后端開發 08 使用log4js打日志

      node demo-fun.js

      可以得到跟上面日志圖片的效果,讀完可以試試。

      效果如下:

      項目配置使用日志

      log4js 可以基于代碼配置日志規則,但是我們推薦使用json來配置。這是一個好習慣,雖然修改代碼和配置都需要重啟應用,但是可以通過程序實現讓代碼不重啟也加載日志,這一點本文不作深入展示,后續補上。

      代碼配置日志

      讀者可以保存為demo2.js, 自行運行。

      //demo2.js const log4js = require("log4js"); //這里配置log4js使用fileAppender來輸出“error”級別的日志。 //然后fileAppender是一個文件類型的日志累加器,輸出日志到文件demo2.log log4js.configure({ appenders: { fileAppender: { type: "file", filename: "demo2.log" } }, categories: { default: { appenders: ["fileAppender"], level: "error" } } }); const logger = log4js.getLogger("demo"); //下面調用logger對象來打印一些日志。 logger.info("普通日志輸出在這里?。。?); logger.error("雷學委,程序發現錯誤了,報警信息!"); logger.fatal("雷學委,這里通常是服務端/引擎吃不消了,打印嚴重錯誤日志。");

      使用JSON配置log4js

      把下面的內容保存為log4js.json

      定義了兩個appender:fileAppender, stdout,分別寫日志到文件和標準輸出流。

      然后設置了default(默認)加載的appenders列表。

      { "appenders": { "fileAppender": { "type": "file", "filename": "leiXueWei.log" }, "stdout": { "type": "stdout", "layout": { "type": "pattern", "pattern": "%d [%p] [%c] - %m%n" }} }, "categories": { "default": { "appenders": ["fileAppender","stdout"], "level": "info" } } }

      雷學委的 simpleweb.js 代碼

      const log4js = require("log4js"); const logCfg = require("./log4js.json") console.log('logCfg:',logCfg) log4js.configure(logCfg) const logger = log4js.getLogger('雷學委Logger') const pid = require('process').pid logger.info("process id:",pid) const server = require('http').createServer((req,res)=>{ console.log(new Date() + ' - visiting app:', req.url) logger.log('visiting app:', req.url) res.write("Levin - Log4js DEMO - ProcessId: "+pid) res.end() }) server.listen(8000,()=>{console.log('listening at 8000, pid:',pid)})

      使用log4js打印日志效果圖

      當前項目路徑中,可以找到下面日志文件leixuewei.log,我們查看發現console.log的信息都沒有被記錄。

      log4js的logger 跟console.log的區別

      console.log

      通常是我們用來輸出程序中間狀態/事件等信息,也能像打印日志一樣把日期其他數據都配套上,但是它更加輕便,而且不能寫到文件中,打印方式也比較單一。

      log4js提供logger給我們使用,這樣我們可以log4js.getLogger(不同logger的名字),來區別的打印程序中間狀態/事件等信息。

      關鍵是能夠寫到文件中,這樣方便我們以后回溯程序狀態。

      log數據很有用,必須讓程序打印準確的信息

      比如程序運營一個月后某段時間發現程序渲染頁面特別慢。有了文件日志,我們可以輕松的進行統計分析,發現程序一些懶惰的bug,那些隨著時間才能被發現的bug。

      特別是一些多人協作的項目,一個開發可能不知道其他開發代碼的邏輯,經過多次包裝后,有可能出現一些詭異的循環,或者特定條件才執行的代碼(比如根據節假日來展示活動的代碼)。

      很多問題在程序不被運行時,很難被發現,所以通過日志,可以記錄并跟蹤發現潛在問題,當然前提是,開發者得往程序中輸出日志。

      另外一個,就是不能盲目輸出過多日志,訪問主頁,你打印1G的log數據,不光是占有硬盤還容易導致主頁加載不出來。說的稍微夸張,但是品一品。

      生產環境可用的log4js配置

      好,剛好端午,附送一個適合生存環境使用的log4js.prod.json配置。 它定義了每天日志回滾,并保持30天的log數據,基本符合生產使用。

      { "appenders": { "fileAppender": { "type": "dateFile", "daysToKeep": 30, "pattern": ".yyyyMMdd", "filename": "leixuewei.log", "layout": { "type": "pattern", "pattern": "%d [%p] [%c] - %m%n" } } }, "categories": { "default": { "appenders": ["fileAppender"], "level": "info" } } }

      下面是pattern為“.yyyyMMddhhmm’ 是的日志滾動效果,讀者自行下載代碼修改嘗試吧。

      總結

      博主給個小建議

      一定要打log,除非這個應用只有你維護不然出故障就是坑人。

      可能我們寫了100行代碼可以打印個2到3行,如果是一些特別復雜的業務可以多打點。

      同時使用不同級別的日志來打印。

      這不是硬性標準,關鍵是反復使用中學會高效的使用日志系統。

      持續學習持續開發,我是雷學委

      參考鏈接

      雷學委本文展示的項目代碼

      日志原理與開發分析這篇完全指南就夠了!適應各種規模!

      log4js 更多示例

      log4js文檔

      javaScript

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:excel表格無法插入列怎么辦
      下一篇:Word2019文檔中更改樣式的方法(word2019更改樣式的樣式集在哪里)
      相關文章
      国产亚洲精久久久久久无码AV| 亚洲冬月枫中文字幕在线看| 亚洲欧洲日本国产| 综合亚洲伊人午夜网| 亚洲午夜无码AV毛片久久| 日韩亚洲精品福利| 偷自拍亚洲视频在线观看99| 亚洲av日韩综合一区久热| 豆国产96在线|亚洲| AV激情亚洲男人的天堂国语| 亚洲熟女综合色一区二区三区| 亚洲午夜无码毛片av久久京东热| 在线观看亚洲AV日韩AV| 亚洲欧美日本韩国| 亚洲最大av资源站无码av网址| 亚洲a∨无码男人的天堂| 亚洲中文久久精品无码1| 亚洲资源最新版在线观看| 久久精品国产亚洲AV蜜臀色欲| 亚洲免费观看在线视频| 亚洲日韩乱码中文无码蜜桃| 亚洲神级电影国语版| 亚洲av产在线精品亚洲第一站| 亚洲综合中文字幕无线码| 亚洲午夜无码毛片av久久京东热| 亚洲s码欧洲m码吹潮| 五月天婷亚洲天综合网精品偷| 亚洲美女高清一区二区三区| 亚洲午夜国产精品无码| 亚洲gv白嫩小受在线观看| 久久精品国产亚洲AV嫖农村妇女| 亚洲精品偷拍无码不卡av| 33333在线亚洲| 日本亚洲中午字幕乱码| 亚洲一区日韩高清中文字幕亚洲 | 色老板亚洲视频免在线观| 亚洲精品无码aⅴ中文字幕蜜桃| 久久精品熟女亚洲av麻豆| 亚洲一区二区三区在线播放| 亚洲AV一宅男色影视| 亚洲国产精品yw在线观看|