国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

關于自定義Egg.js的請求級別日志詳解

2024-05-06 15:27:19
字體:
來源:轉載
供稿:網友

Egg.js 是什么?

Egg.js 為企業級框架和應用而生,我們希望由 Egg.js 孕育出更多上層框架,幫助開發團隊和開發人員降低開發和維護成本。

注:Egg.js 縮寫為 Egg

背景

組織為了更好的對各個業務的請求日志進行統一的分析,制定了統一的日志打印規范,比如:

[time][processId][traceId][userid] Hello World....

統一格式之后,業務現有業務的日志工具打印出來的格式是無法滿足該規范的,所以我們需要對此進行改造。

我們前端目前Node中間層使用的框架是Egg.js,所以下文講述下如何在Egg.js上自定義請求日志格式。

開始動手

Egg.js中自帶了三種logger,分別是

Context Logger App Logger Agent Logger

Context Logger主要是用來記錄請求相關的日志。每行日志都會在開頭自動的記錄當前請求的一些信息,比如時間、ip、請求url等等。

App Logger用于記錄應用級別的日志,比如程序啟動日志。

Agent Logger用于記錄多進程模式運行下的日志。

我們想自定義請求級別的日志,那重點就要從Context Logger去研究怎么做。最理想的方案就是,Context Logger本身支持配置化的自定義格式,通過在egg.js的config配置文件中,通過傳入formatter的參數就能自定義。

//config.default.jsexports.customLogger = { log: {  file: 'appname.log',  formatter: (message)=>{   return `${message.time}${message.processid}`   } }}

但不久我們發現這條路走不通,設置了這個formatter并不起作用。從Context Logger的源碼中,我們發現的端倪context_logger.js

[ 'error', 'warn', 'info', 'debug' ].forEach(level => { const LEVEL = level.toUpperCase(); ContextLogger.prototype[level] = function() { const meta = {  formatter: contextFormatter,  paddingMessage: this.paddingMessage, }; this._logger.log(LEVEL, arguments, meta); };});module.exports = ContextLogger;function contextFormatter(meta) { return meta.date + ' ' + meta.level + ' ' + meta.pid + ' ' + meta.paddingMessage + ' ' + meta.message;}

在源碼中我們可以看到,formatter參數已經被內部的一個自定義格式化函數覆蓋了,配置中寫的是不會啟作用的。
此路不通,只能嘗試自己實現logger去解決。自己實現我們需要考慮一些點,比如:

日志要寫到文件中,錯誤日志單獨寫一個文件 需要能按天或按小時切割日志 IO性能

如果這些都自己實現的話,那就太麻煩了。好在了解到Egg的這幾個logger都是基于egg-logger和egg-logrotator去實現的,所以我們可以站在巨人的肩膀上搞事情。

Context Logger是基于egg-logger的FileTransport類去進行文件落地的,同時FileTransport也默認配置了egg-logrotator的日志拆分。所以,我們只需要繼承FileTransport類,實現接口就可以了,代碼如下:

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 罗江县| 天柱县| 岳阳市| 上饶市| 龙山县| 德阳市| 文安县| 长治县| 台南县| 奉新县| 蒙山县| 丰宁| 辉县市| 大邑县| 旺苍县| 蓝山县| 武城县| 久治县| 游戏| 玛沁县| 天峨县| 聂拉木县| 陇西县| 河北区| 张家界市| 迭部县| 桓台县| 新竹市| 福海县| 长岛县| 鹤庆县| 长岭县| 香港 | 长顺县| 崇信县| 曲阜市| 定结县| 黔江区| 巧家县| 石首市| 安图县|