Nuxt日志监控(服务端及客户端日志检测)

news2024/12/25 3:23:38

此文章主要讲解如何使用Nuxt进行日志监控,例如服务端请求日志,客户端请求日志,方便线上出现问题能及时排查问题所在

一、下载依赖
npm install winston winston-daily-rotate-file
二、plugin下创建日志处理插件winston.js,对日志进行分级
export default function ({ app }) {
  if (process.server) {
    const winston = require('winston');
    const path = require('path');
    const { combine, timestamp } = winston.format;
    const infoLogPath = path.resolve(process.cwd(), './logs', `info.log`);
    const errorLogPath = path.resolve(process.cwd(), './logs', `error.log`);
    const logger = winston.createLogger({
      level: 'info',
      format: winston.format.combine(
        winston.format.timestamp(),
        winston.format.printf(({ timestamp, level, message }) => {
          return `${timestamp} [${level}]: ${message}`;
        })
      ),
      transports: [
        new winston.transports.File({
          format: combine(timestamp()),
          level: 'info',
          filename: infoLogPath,
          maxsize: 5 * 1024 * 1024,  // 单个日志文件大小
          maxFiles: 3 // 最大文件数
        }),
        new winston.transports.File({
          format: combine(timestamp()),
          level: 'error',
          filename: errorLogPath,
          maxsize: 5 * 1024 * 1024,
          maxFiles: 3
        })
      ]
    });
    app.$winstonLog = logger;
  }
}
三、客户端错误全局监听,plugin中创建errorHandler.js
// plugin/errorHandler.js
import Vue from 'vue'
import axios from 'axios'
export default ({ app }) => {
    Vue.config.errorHandler = (error, instance, info) => {
      // 获取当前页面的路由信息
      const currentRoute = app.router.currentRoute;
      const str = `Client error on page: ${currentRoute.fullPath} | Error: ${error.message} | Info: ${info}`
      
      // 直接请求后端接口,把错误信息给后端,让后端进行客户端错误的日志存储
      axios.post('/xxxxxxx',{ message: str })
    };
};
四、插件挂载nuxt.config.js

一定要放在plugins中最前面,后续的插件中才能拿到app.$winstonLog

// nuxt.config.js
export default {
  plugins: [
    { src: '~/plugin/winston.js', ssr: true },
    { src: '~/plugin/errorHandler.js' },
   ....
  ]
}
五、在服务端请求axios 里做日志打点

捕获在Node端接口请求错误,对日志进行添加

// utils/axios.js

export default ({ $axios, app }) => {
  $axios.onResponse((response) => {
    // app.$winstonLog只在服务端存在,需要判断是否存在 正常返回这里可以无需记录
    if (app.$winstonLog) {
      app.$winstonLog.info(`[${response.status}] ${response.request.path}`);
    }
    return response.data;
  });

  $axios.onError((err) => {
    // 接口请求异常 添加日志记录
    if (app.$winstonLog) {
      app.$winstonLog.error(
        `ServerApi | ${err.request.path} | ${err.message}`
      );
      app.$winstonLog.error(err.response && err.response.data);
    }
  });
};
六、查看日志记录

winston会在每次请求页面的时候自动打印一次日志,在 node 端出错的时候也会自动打印日志,会在当前项目中生成logs文件夹

在这里插入图片描述

---------------------------------------客户端错误日志前端自行处理版本----------------------------------------------
一、下载依赖

npm install winston winston-daily-rotate-file express

二、plugin下创建日志处理插件logger.js,对日志进行分级
export const loggerFun = () => {
    const winston = require('winston');
    const path = require('path');
    const { combine, timestamp } = winston.format;

    const infoLogPath = path.resolve(process.cwd(), './logs', `info.log`);
    const errorLogPath = path.resolve(process.cwd(), './logs', `error.log`);
    const logger = winston.createLogger({
    level: 'info',
    format: winston.format.combine(
        winston.format.timestamp(),
        winston.format.printf(({ timestamp, level, message }) => {
        return `${timestamp} [${level}]: ${message}`;
        })
    ),
    transports: [
        new winston.transports.File({
        format: combine(timestamp()),
        level: 'info',
        filename: infoLogPath,
        maxsize: 5 * 1024 * 1024,  // 单个日志文件大小
        maxFiles: 3 // 最大文件数
        }),
        new winston.transports.File({
        format: combine(timestamp()),
        level: 'error',
        filename: errorLogPath,
        maxsize: 5 * 1024 * 1024,
        maxFiles: 3
        })
    ]
    });
    return logger
  }
三、plugin下创建日志处理插件winston.js插件
export default function ({ app }) {
  if (process.server) {
    const {loggerFun} = require('./logger');
    app.$winstonLog = loggerFun();
  }
}
四、plugin下创建客户端错误插件errorHandler.js
import Vue from 'vue'
import axios from 'axios'
export default ({ app }) => {
    Vue.config.errorHandler = (error, instance, info) => {
      // 获取当前页面的路由信息
      const currentRoute = app.router.currentRoute;
      const str = `Client error on page: ${currentRoute.fullPath} | Error: ${error.message} | Info: ${info}`
      // 请求Nuxt自定义node接口,因为客户端错误无法访问app.$winstonLog,需要注意的是线上不同端口要做区分 及跨域处理
      axios.post('/logs/setLog',{ message: str })
    };
};
五、根目录创建serverMiddleware文件夹,并创建setLog.js,自定义Node接口设置日志
const express = require('express');
const app = express();
app.use(express.json());
const {loggerFun} = require('../plugin/logger');
app.post('/setLog', (req, res) => {
    const logger = loggerFun()
    logger.error(req.body.message);
    res.json({
        status: 'ok'
    })
})

module.exports = {
  path: 'logs', 
  handler: app
}
六、插件挂载nuxt.config.js

一定要放在plugins中最前面,后续的插件中才能拿到app.$winstonLog

// nuxt.config.js
export default {
  serverMiddleware: [
    '~/serverMiddleware/setLog.js'
  ],
  plugins: [
    { src: '~/plugin/winston.js', ssr: true },
    { src: '~/plugin/errorHandler.js' },
   ....
  ]
}
七、日志查看

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2197802.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

靠谱!有了它,微信自动统计报表轻松搞定!

当你需要定期统计多个微信号的数据时,每次都要逐一登录并手动统计各种数据,这不仅耗时,还容易出错。 好在,一个便捷的工具——个微管理系统能够帮助我们高效地管理这些繁杂的数据,让我们的工作事半功倍。 好友统计报…

安装Node.js环境,安装vue工具(最佳实践)

一、安装Node.js 去官网下载自己需求的安装包(我提供的步骤是windows10 64x) 下载 | Node.js 中文网 (nodejs.cn)https://nodejs.cn/download/ 下载好后,安装到默认路径就好了,所占用的内容很少。 一直点next就行了 安装好后&a…

python操作.docx、.pptx文件

python操作.docx、.pptx文件 .docx文件和.pptx文件是Microsoft Office套件中两种常见的文件格式,分别对应Word文档和PowerPoint演示文稿。WPS Office完美支持Microsoft Office文件格式。 使用 Python 操作 .docx 和 .pptx 文件是一项非常实用的技能,尤…

BlabkForestLabs 又放大招:“蓝莓”模型其实是 Flux1.1?!

神秘的 AI 生成模型 BlabkForestLabs 又放大招了?就在 AI 绘画圈还在训练 Flux.1 练的不亦乐乎的时候,黑森林工作室又推出了一个新的模型—— Flux1.1 !这次升级后的 Flux1.1 性能直接完爆前版的 Flux.1 ,再次将 AI 绘画的上限拉高…

如何给ppt增加新的一页?这2个ppt使用技巧值得推荐!

在当今讲究视觉表现力的时代,PPT已经成为职场中不可或缺的工具。无论是汇报工作、演示方案还是传递想法,一份精美的PPT都能让你的演讲(演示)更加出色。 然而,制作PPT并非易事,尤其是对于新手来说&#xff…

STM32-HAL库 驱动DS18B20温度传感器 -- 2024.10.8

目录 一、教程简介 二、驱动理论讲解 三、CubeMX生成底层代码 四、Keil5编写代码 五、实验结果 一、教程简介 本教程面向初学者,只介绍DS18B20的常用功能,但也能满足大部分的运用需求。跟着本教程操作,可在10分钟内解决DS18b20通信难题。…

windows认证

本地环境用户信息存储在%systemroot%/system32/SAM 域环境用户信息存储在ntds.dit 本地认证 windows系统下哈希结构:username:RID:LM-HASH:NT-HASH LM哈希 算法: 转大写,转二进制,补0补足14字节 二分获得两段字串&#xff…

算法:238.除自身以外数组的乘积

题目 链接:leetcode链接 思路分析(前缀和) 这道题非常类似 724. 寻找数组的中心下标 在前一篇博客讲解了该题目 传送门:算法:724.寻找数组的中心下标 这道题目的区别在于,这道题是预处理前缀积和后缀积 另外&#x…

了解网页 blob 链接

blob 链接 自从 HTML5 提供了 video 标签,在网页中播放视频变得非常简单,只要在代码中插入一个 video 标签,再将 video 标签的 src 属性设置为视频的链接就可以了。由于 src 指向的是视频文件真实的地址,所以当我们通过浏览器的调…

如何绘制短剧产业链图谱?短剧产业前景如何?

绘制短剧产业链图谱是一个涉及多个环节的复杂过程。我们首先需要确定产业链的主要环节,包括内容创作、制作、发行、宣传和观众。每个环节都由不同的参与者组成,如编剧、导演、演员、制作公司、版权销售商、在线平台、电视台、广告公司和消费者等&#xf…

《CTF 特训营》:网络安全竞赛的进阶指南

在网络安全领域日益受到重视的今天,CTF(Capture The Flag)竞赛作为一种检验和提升网络安全技能的方式,受到了越来越多爱好者的关注。而《CTF 特训营》这本书,无疑是一本帮助读者深入了解 CTF 竞赛的优秀读物。 一、书籍…

Linux shell编程学习笔记86:sensors命令——硬件体温计

0 引言 同事们使用的Windows系统电脑,经常莫名其妙地装上了鲁大师,鲁大师的一项功能是显示系统cpu等硬件的温度。 在Linux系统中,sensors命令可以提供类似的功能。 1 sensors命令 的安装和配置 1.1 sensors命令 的安装 要使用sensors命…

INS淡绿色风格人像街拍Lr调色教程,手机滤镜PS+Lightroom预设下载!

调色介绍 INS 淡绿色风格人像街拍通过 Lightroom 调色可以营造出清新、自然、时尚的视觉效果。这种风格以淡绿色为主色调,给人一种宁静、舒适的感觉。 预设信息 调色风格:INS风格预设适合类型:人像,街拍,自拍&#…

动态规划算法题目练习——62.不同路径

1.题目解析 题目来源:62.不同路径——力扣 测试用例 2.算法原理 1.状态表示 这时由于避免越界初始化所以将左上角置为虚拟位置,创建一个二维dp表用来存储到当前为止的所有路径 2.状态转移方程 以dp[i,j]为例,起点到该位置的路径是起点到其上…

信息安全工程师(40)防火墙技术应用

一、防火墙的基本概念 防火墙是一种网络安全设备,用于监控和控制网络流量,以保护网络免受未经授权的访问和攻击。它可以是装配多张网卡的通用计算机,也可能是通用的物理设备。防火墙通过在网络之间设置访问控制策略,对进出的通信流…

JAVA开源项目 新生报到网站 计算机毕业设计

本文项目编号 T 002 ,文末自助获取源码 \color{red}{T002,文末自助获取源码} T002,文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 提…

【C语言】指针练习题

一、指针指向问题 int main() {int a[5] { 1, 2, 3, 4, 5 };int* ptr (int*)(&a 1);printf("%d,%d", *(a 1), *(ptr - 1));return 0; } 结果为:2,5。&a是整个数组(&a 1)被强转为(int*&am…

mujoco版本问题以及ERROR: Failed building wheel for mujoco-py

问题: ERROR: Failed building wheel for mujoco-py Failed to build mujoco-py ERROR: Could not build wheels for mujoco-py, which is required to install pyproject.toml-based projects 起因: 一开始我使用这个命令安装pip install mujoco_py&…

跨境卖家品牌出海要注意哪些方面

随着目前互联网的发展,市场由线下扩张到全国,再扩张到了全球,但是海外市场和国内并不相同跨境卖家品牌想要出海,需要注意多个方面,以确保能够在国际市场上成功立足并发展。以下是一些关键点: 首先想得拥有…

2-116 基于matlab的主成分分析(PCA)及累积总和(CUSUM)算法故障监测

基于matlab的主成分分析(PCA)及累积总和(CUSUM)算法故障监测,针对传统的多元统计分析方法对生产过程中微小故障检测不灵敏的问题,使用基于主元分析的累积和的微小故障检测方法进行故障监测,通过…