NodeJS 后端開發 08 使用log4js打日志
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 ,然后運行:
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文檔
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。