日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用winston和morgan记录express日志信息

發布時間:2025/6/17 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用winston和morgan记录express日志信息 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近忙著做畢業設計,項目是一個多用戶博客程序。后端技術棧為express+mongodb,為了能夠更為詳細的記錄程序運行日志,便開始研究如何使用winston和morgan。項目代碼已托管到GitHub,感興趣的同學可以看一下:PureBlog-API

效果

可以在終端中顯示所需要的日志信息

可以以文件的形式存儲日志

實現步驟

winston和morgan的詳細使用方法大家還是以官方文檔為準,我下面只是簡要介紹我是如何使用的。

1.安裝winston和morgan

npm install --save winston morgan 復制代碼

2.創建logger

- 先判斷項目根目錄是否存在logs文件夾,不存在則創建。 - 配置日志等級和顏色 - 配置日志以文件存儲是的等級和文件名 - 自定義日志格式 - 創建stream用于添加morgan的Http請求日志信息 復制代碼

代碼實現如下:

const path = require('path') const fs = require('fs') const { createLogger, format, transports, addColors } = require('winston')// 確保項目根目錄存在logs文件夾 const logDirectory = path.resolve('./', 'logs') fs.existsSync(logDirectory) || fs.mkdirSync(logDirectory)// 配置等級和顏色 const config = {levels: {error: 0,debug: 1,warn: 2,data: 3,info: 4,verbose: 5,silly: 6,http: 7},colors: {error: 'red',debug: 'blue',warn: 'yellow',data: 'grey',info: 'green',verbose: 'cyan',silly: 'magenta',http: 'yellow'} }// 添加自定義顏色 addColors(config.colors)const options = {allLog: {level: 'http',filename: path.resolve(logDirectory, 'all.log')},errorLog: {level: 'error',filename: path.resolve(logDirectory, 'error.log')} }function formatParams(info) {let { timestamp, level, message } = infomessage = message.replace(/[\r\n]/g, '')return `[${timestamp}] ${level}: ${message}` }const logger = createLogger({level: 'http',levels: config.levels,handleExceptions: true,json: true,maxsize: 5242880, // 5MBmaxFiles: 5,format: format.combine(format.colorize(),format.timestamp({ format: 'YYYY-MM-DD HH:mm:ss' }),format.printf(formatParams)),transports: [new transports.File(options.allLog), new transports.File(options.errorLog), new transports.Console()] })// 添加morgan日志信息 logger.stream = {write: function(message, encoding) {logger.http(message)} }module.exports = logger復制代碼
  • 創建morgan日志處理中間件
  • const morgan = require('morgan') const logger = require('../utils/logger')// 解決自定義格式時響應時間不著色的問題 morgan.token(`status`, (req, res) => {const status = (typeof res.headersSent !== `boolean`? Boolean(res._header): res.headersSent)? res.statusCode: undefined// get status colorconst color =status >= 500? 31 // red: status >= 400? 33 // yellow: status >= 300? 36 // cyan: status >= 200? 32 // green: 0 // no colorreturn `\x1b[${color}m${status}\x1b[0m` })const devModify = ':method :url :status :response-time ms' const combinedModify = ':remote-addr :method :url :status :response-time ms :user-agent"' const morganFormat = process.env.NODE_ENV == 'development' ? devModify : combinedModifymodule.exports = morgan(morganFormat, { stream: logger.stream })復制代碼
  • 使用morgan日志處理中間件
  • const handleLog = require('./middlewares/handleLog')app.use(handleLog) 復制代碼
  • 完成以上步驟,morgan的日志信息便可以顯示出來。當我們需要自己的日志時,需要引入logger,并使用logger.info或者logger.error等方法。
  • 這是我在常規的業務邏輯中記錄日志:

    async getAllTags(req, res, next) {try {const tags = await Tag.find().exec()res.status(200).send({success: true,data: tags})} catch (e) {logger.error(e.message)next(new Error(`獲取所有標簽信息失敗`))} } 復制代碼

    這是我在錯誤處理中間件中統一對錯誤進行記錄:

    const logger = require('../utils/logger')// 錯誤捕捉 module.exports = (err, req, res, next) => {logger.error(err.message)res.status(500).send({success: false,message: err.message}) }復制代碼

    參考鏈接

    winston

    morgan

    express-combine-morgan-and-winston/

    轉載于:https://juejin.im/post/5cd000f7e51d456e5a07298f

    總結

    以上是生活随笔為你收集整理的利用winston和morgan记录express日志信息的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。