如何使用nodejs日志模块winston

这次给大家带来如何使用nodejs日志模块winston,使用nodejs日志模块winston的注意事项有哪些,下面就是实战案例,一起来看一下。

winston 日志模块

在使用 nodejs winston 模块中,加上相关的两个模块,事倍功半。

express-winston

winston-daily-rotate-file

express-winston

是 express-winston 的 winston 的增加版, 是作为 express 的注意事项来打印日志,不仅有请求头信息,并且有响应时间。
作为中间件, 为什么会有响应时间呢? 因为 express-winston 改写了 express 的 res.end 办法, 是请求结束后再打的日志。

代码片段

var end = res.end;res.end = function(chunk, encoding) { res.responseTime = (new Date) - req._startTime; res.end = end; res.end(chunk, encoding); ... }

登录后复制

express-winston 没有修改或者扩展 winston 的transport, 而 winston-daily-rotate-file 正是增强了 winston 的transport 办法

winston-daily-rotate-file

winston-daily-rotate-file 是 winston 扩展, 增加了 transport 的办法,使 winston 有滚动日志的能力。

结合使用

我们来一个需求: 如何让 express-winston 打印日志的时候,也打印出接口 /api 的注意事项和响应数据?

该日志中间件应该在调用链 api 后面, api/* 业务处理之前。 like: app.use(‘/api’, apiRequestLogger, apiHandler)

要获取到响应数据, 就要在业务处理完后 send 出来后才能捕获到,express 所有的请求响应最后都是走 res.send 我们可以从这里入手捕获响应数据

代码如下

import winston from 'winston'import expressWinston from 'express-winston'import 'winston-daily-rotate-file'import path from 'path'export let DailyRotateFileTransport = (fileName) => { return new (winston.transports.DailyRotateFile)({ filename: path.join(process.env.LOGPATH, `${fileName}-%DATE%.log`), datePattern: 'YYYY-MM-DD-HH', // maxSize: '20m', maxFiles: '7d', timestamp: () => new Date().format('yyyy-MM-dd hh:mm:ss.S') })}export let pageRequestLogger = expressWinston.logger({ transports: [ DailyRotateFileTransport('page-request') ], meta: true, // optional: control whether you want to log the meta data about the request (default to true) msg: 'HTTP {{req.method}} {{req.url}}', // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}" expressFormat: true, // Use the default Express/morgan request formatting. Enabling this will override any msg if true. Will only output colors with colorize set to true colorize: false, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red). ignoreRoute: function (req, res) { // 只打印页面请求信息 let notPageRequest = false let ignoreArr = ['/api', '.js', '.css', '.png', '.jpg', '.gif'] ignoreArr.forEach(item => {  if (req.url.indexOf(item) > -1) notPageRequest = true }) return notPageRequest } // optional: allows to skip some log messages based on request and/or response})export let apiRequestLogger = (req, res, next) => { let send = res.send let content = '' let query = req.query || {} let body = req.body || {} res.send = function () { content = arguments[0] send.apply(res, arguments) } expressWinston.logger({ transports: [  DailyRotateFileTransport('api-request') ], meta: true, // optional: control whether you want to log the meta data about the request (default to true) msg () {  return `HTTP ${req.method} ${req.url} query ${JSON.stringify(query)} body ${JSON.stringify(body)} resData ${content} ` }, colorize: true, // Color the text and status code, using the Express/morgan color palette (text: gray, status: default green, 3XX cyan, 4XX yellow, 5XX red). ignoreRoute: function (req, res) {  if (req.headers.self) return true  return false } // optional: allows to skip some log messages based on request and/or response })(req, res, next)}

登录后复制

相信看了本文案例你已经掌握了方法,更多精彩请关注【创想鸟】其它相关文章!

推荐阅读:

注意事项

注意事项

以上就是如何使用nodejs日志模块winston的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2751999.html

(0)
上一篇 2025年3月8日 06:05:57
下一篇 2025年2月25日 17:12:47

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何使用Vue中watch

    这次给大家带来如何使用Vue中watch,使用Vue中watch的注意事项有哪些,下面就是实战案例,一起来看一下。 假设有如下代码: fullname: {{fullname}} FirstName: new Vue({ el: ‘#roo…

    编程技术 2025年3月8日
    200
  • JavaScript中基本数据类型之间的转换方法

    在javascript中共有六种数据类型,其中有五种是基本数据类型,还有一种则是引用数据类型。五种基本数据类型分别是:number 数值类型、string 字符串类型、boolean 布尔类型, null 空类型、以及undefined 未…

    2025年3月8日
    200
  • Json字符串使用方法汇总

    这次给大家带来Json字符串使用方法汇总,Json字符串使用的注意事项有哪些,下面就是实战案例,一起来看一下。 下面将介绍日常中使用的三种解析json字符串的方法  1.首先,我们先看一下什么是 json 格式字符串数据,很简单,就是 js…

    编程技术 2025年3月8日
    200
  • redis在nodejs中应用实战项目分享

    这次给大家带来redis在nodejs中应用实战项目分享,redis在nodejs中应用的注意事项有哪些,下面就是实战案例,一起来看一下。 redis是一个性能非常好的内存数据库,部署在应用程序和mysql数据中间做注意事项库,可以极大的提…

    编程技术 2025年3月8日
    200
  • 不用JS实现菜单打开关闭

    这次给大家带来不用JS实现菜单打开关闭,不用JS实现菜单打开关闭的注意事项有哪些,下面就是实战案例,一起来看一下。 我在写有菜单栏的网页时,基本都会用响应式设计来适配移动端,例如把不重要的菜单选项隐藏,或者创建一个菜单按钮来控制的菜单的打开…

    2025年3月8日
    200
  • 怎样实现Vue项目中使用Vux

    这次给大家带来怎样实现Vue项目中使用Vux,Vue项目中使用Vux的注意事项有哪些,下面就是实战案例,一起来看一下。 默认已安装vue环境 1.安装vux npm install vux –save-dev 2.安装vux-l…

    2025年3月8日
    200
  • 如何操作Vue项目内使用d3.js

    这次给大家带来如何操作Vue项目内使用d3.js,Vue项目内使用d3.js的注意事项有哪些,下面就是实战案例,一起来看一下。 之前写一个 Demo里面 有些东西要使用d3实现一些效果 但是在很多论坛找资源都找不到可以在Vue里面使用D3.…

    2025年3月8日
    200
  • 使用缓存调用链实现JS方法重载步骤详解

    这次给大家带来使用缓存调用链实现JS方法重载步骤详解,使用缓存调用链实现JS方法重载的注意事项有哪些,下面就是实战案例,一起来看一下。 1.什么是方法重载 方法重载是指在一个类中定义多个同名的方法,但要求每个方法具有不同的参数的类型或参数的…

    编程技术 2025年3月8日
    200
  • 怎样使用JS实现缓冲运动

    这次给大家带来怎样使用JS实现缓冲运动,使用JS实现缓冲运动的注意事项有哪些,下面就是实战案例,一起来看一下。 缓冲需要用到数值取整,向上取整:Math.ceil()  向下取整Math.floor() 移动的速度慢慢减慢的效果,移动速度=…

    编程技术 2025年3月8日
    200
  • 通过vue.js使用axios实现下载功能(详细教程)

    下面我就为大家分享一篇vue.js 使用axios实现下载功能的示例,具有很好的参考价值,希望对大家有所帮助。 本文主要来源于知乎一个回答,这里红色部分做了自己的处理,虽然自己的少,可是很有用的几句代码哦 只好回答一下axios如何拦截ge…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论