利用winston和morgan记录express日志信息
生活随笔
收集整理的這篇文章主要介紹了
利用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復制代碼這是我在常規的業務邏輯中記錄日志:
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日志信息的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SpringBoot入门(1)——创建s
- 下一篇: 云计算技术都要学什么?教你分清公有云、私