摘要:比如權(quán)限驗(yàn)證,比如異常處理,比如日志管理。但突然有一天在線上訪問(wèn)自己的項(xiàng)目,發(fā)現(xiàn)頁(yè)面報(bào)錯(cuò)了,想知道為什么報(bào)錯(cuò)了,發(fā)現(xiàn)竟然沒(méi)有什么很好的方法,如果我沒(méi)有通過(guò)一個(gè)東西去記錄的話,所以日志管理這個(gè)時(shí)候就顯得尤為重要了。
第一次寫(xiě)node項(xiàng)目,之前除了前端的腳手架構(gòu)建接觸過(guò)一些簡(jiǎn)單的,所以總是碰到很多坑。比如權(quán)限驗(yàn)證,比如異常處理,比如日志管理。
在看log4js使用方法的時(shí)候突然想到自己就可以實(shí)現(xiàn)簡(jiǎn)單的業(yè)務(wù),不需要借助組件,雖然簡(jiǎn)單但是實(shí)現(xiàn)了挺開(kāi)心的。
自己的node項(xiàng)目寫(xiě)了一段時(shí)間了,但一直沒(méi)有加上日志管理的功能,因?yàn)橛X(jué)得沒(méi)必要,很多時(shí)候都是在自己電腦上面調(diào)試的。
但突然有一天在線上訪問(wèn)自己的項(xiàng)目,發(fā)現(xiàn)頁(yè)面報(bào)錯(cuò)了,想知道為什么報(bào)錯(cuò)了,發(fā)現(xiàn)竟然沒(méi)有什么很好的方法,如果我沒(méi)有通過(guò)一個(gè)東西去記錄的話,所以日志管理這個(gè)時(shí)候就顯得尤為重要了。
頁(yè)面出現(xiàn)錯(cuò)誤
根據(jù)錯(cuò)誤類型創(chuàng)建日志文件
寫(xiě)入錯(cuò)誤信息
創(chuàng)建日志方法的實(shí)現(xiàn)先判斷要寫(xiě)入的路徑是否存在,不存在則創(chuàng)建
判斷日志要?jiǎng)?chuàng)建在的文件夾存不存在,不存在則創(chuàng)建
判斷當(dāng)前要?jiǎng)?chuàng)建的日志存不存在,存在繼續(xù)寫(xiě)入,不存在則創(chuàng)建并寫(xiě)入
fs.stat檢查路徑是否存在
fs.mkdir創(chuàng)建目錄的方法
fs.readFile讀取文件的方法
fs.writeFile寫(xiě)入文件的方法
完成的寫(xiě)入日志函數(shù)我的業(yè)務(wù)是定義了兩個(gè)類型,錯(cuò)誤和sql,然后傳入日志內(nèi)容
/** * 寫(xiě)入日志 * @param {String} type // 日志類型 err 錯(cuò)誤日志 sql sql日志 * @param {String} content */ writeLog (content, type = "err") { // 創(chuàng)建不存在的文件夾 await this.dirExists(`log/file/${type}`) // 獲取到文件files fs.readFile(`log/file/${type}/${utils.switchTime(new Date(), "YYYY-MM-DD")}.log`, (err, data) => { if (err) { console.log(err) } // 寫(xiě)入文件 fs.writeFile(`log/file/${type}/${utils.switchTime(new Date(), "YYYY-MM-DD")}.log`, `${data || ""} ${content}`, async (err) => { if (err) { console.log(err) } }) }) }使用 在sql執(zhí)行函數(shù)上使用
function query (sql) { // 寫(xiě)入sql NodeLog.writeLog(sql, "sql") return new Promise((resolve, reject) => { pool.getConnection((err, conn) => { if (err) { // 如果是連接斷開(kāi),自動(dòng)重新連接 if (err.code === "PROTOCOL_CONNECTION_LOST") { setTimeout(query(), 2000); reject("斷開(kāi)重連"); } else { console.error(err.stack || err); reject(err); } } else { // 得到結(jié)果 conn.query(sql, (queryErr, result) => { if (queryErr) { reject(queryErr); } else { resolve(result); } // 釋放連接 conn.release(); }) } }) }) }在異常處理函數(shù)中使用
handleException (req, res, e) { // 寫(xiě)入日志 NodeLog.writeLog(e) res.json({ code: e.errno || 20501, success: false, content: e, message: "服務(wù)器內(nèi)部錯(cuò)誤" }) }最后
日志完整代碼
node項(xiàng)目
對(duì)應(yīng)的前端項(xiàng)目
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/104684.html
摘要:下需要為每個(gè)單獨(dú)進(jìn)行采集配置采集日志目錄,采集規(guī)則,存儲(chǔ)目標(biāo)等,不易維護(hù)。日志服務(wù)的日志架構(gòu)實(shí)踐我們提出基于阿里云日志服務(wù)的日志處理架構(gòu),用以補(bǔ)充社區(qū)的方案,來(lái)嘗試解決場(chǎng)景下日志處理的一些細(xì)節(jié)體驗(yàn)問(wèn)題。 摘要: 在Kubernetes服務(wù)化、日志處理實(shí)時(shí)化以及日志集中式存儲(chǔ)趨勢(shì)下,Kubernetes日志處理上也遇到的新挑戰(zhàn),包括:容器動(dòng)態(tài)采集、大流量性能瓶頸、日志路由管理等問(wèn)題。本文...
摘要:日志規(guī)范一般前端開(kāi)發(fā)同學(xué),對(duì)日志其實(shí)不太敏感,畢竟前端大多數(shù)情況下,不太關(guān)心日志。本文主要梳理了目前我們團(tuán)隊(duì)在開(kāi)發(fā)中日志方面存在的問(wèn)題,以及通過(guò)統(tǒng)一日志規(guī)范,希望達(dá)到什么樣的效果。日志格式字段日志格式統(tǒng)一采用,便于解析處理。nodejs 日志規(guī)范 一般前端開(kāi)發(fā)同學(xué),對(duì)日志其實(shí)不太敏感,畢竟前端大多數(shù)情況下,不太關(guān)心日志。即使有,也可能調(diào)用一些第三方的統(tǒng)計(jì),比如百度統(tǒng)計(jì)或者別的等。在 Node...
摘要:任務(wù)退出碼任務(wù)正常退出批跑模塊會(huì)接受到為,因?yàn)楫惓M顺鰰?huì)接收到。主要注意的檢查項(xiàng)為連接未關(guān)閉等。每次任務(wù)退出后,批跑系統(tǒng)會(huì)檢測(cè)其是否為空,不為空則移動(dòng)到目錄目錄下,并以版本號(hào)為文件夾存儲(chǔ),以方便備份查看。 背景 隨著node的出現(xiàn)與發(fā)展,前端承擔(dān)了越來(lái)越多的職責(zé)。 前端也有越來(lái)越多的場(chǎng)景需要使用批跑腳本 利用爬蟲(chóng)或者接口定時(shí)同步數(shù)據(jù)到DB 線上配置文件、數(shù)據(jù)文件定時(shí)批跑生成并發(fā)布到線...
摘要:參與者流量來(lái)自于內(nèi)部系統(tǒng)和外部流量,其中大部分來(lái)自于外部流量。水平擴(kuò)容服務(wù)的水平擴(kuò)容重要性不言而喻。 背景 目前微店中臺(tái)團(tuán)隊(duì)為了滿足公司大部分產(chǎn)品、運(yùn)營(yíng)以及部分后端開(kāi)發(fā)人員的嘗鮮和試錯(cuò)的需求,提供了一套基于圖形化搭建的服務(wù)端接口交付方案,利用該方案及提供的系統(tǒng)可生成一副包含運(yùn)行時(shí)環(huán)境定義可立即運(yùn)行的工程代碼,最后,通過(guò) 某種serverless平臺(tái) 實(shí)現(xiàn)生成后代碼的部署、CI、運(yùn)行、反...
摘要:阿里開(kāi)源項(xiàng)目,數(shù)據(jù)同步的解決方案。基于數(shù)據(jù)庫(kù)增量日志解析,支持?jǐn)?shù)據(jù)庫(kù)進(jìn)行同步在最新的已經(jīng)支持以及阿里云提供的數(shù)據(jù)庫(kù)使用童鞋的福音。 參考文獻(xiàn):Otter-入門(mén)篇1(阿里開(kāi)源項(xiàng)目Otter介紹) 一、背景 本人是一名應(yīng)屆畢業(yè)生,,還在努力挖坑。最近兩個(gè)月被外派到其他公司做一個(gè)升級(jí)系統(tǒng),做到現(xiàn)在一個(gè)多月。學(xué)到的東西很多,想總結(jié)的東西也很多,可是。。。時(shí)間是讓人猝不及防的東西。好吧,現(xiàn)在先來(lái)...
閱讀 1109·2022-06-21 15:13
閱讀 1928·2021-10-20 13:48
閱讀 1098·2021-09-22 15:47
閱讀 1426·2019-08-30 15:55
閱讀 3188·2019-08-30 15:53
閱讀 578·2019-08-29 12:33
閱讀 779·2019-08-28 18:15
閱讀 3538·2019-08-26 13:58