日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

效果

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

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

實現(xiàn)步驟

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

1.安裝winston和morgan

npm install --save winston morgan 復(fù)制代碼

2.創(chuàng)建logger

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

代碼實現(xiàn)如下:

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復(fù)制代碼
  • 創(chuàng)建morgan日志處理中間件
  • const morgan = require('morgan') const logger = require('../utils/logger')// 解決自定義格式時響應(yīng)時間不著色的問題 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 })復(fù)制代碼
  • 使用morgan日志處理中間件
  • const handleLog = require('./middlewares/handleLog')app.use(handleLog) 復(fù)制代碼
  • 完成以上步驟,morgan的日志信息便可以顯示出來。當(dāng)我們需要自己的日志時,需要引入logger,并使用logger.info或者logger.error等方法。
  • 這是我在常規(guī)的業(yè)務(wù)邏輯中記錄日志:

    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(`獲取所有標(biāo)簽信息失敗`))} } 復(fù)制代碼

    這是我在錯誤處理中間件中統(tǒng)一對錯誤進行記錄:

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

    參考鏈接

    winston

    morgan

    express-combine-morgan-and-winston/

    轉(zhuǎn)載于:https://juejin.im/post/5cd000f7e51d456e5a07298f

    總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。