nuxt asyncData接口错误日志收集

当接口在asyncData中被请求时,若接口报错,无法快速定位到具体事哪个接口报错了,所以需要建立了一个本地错误日志

1.创建一个 logs.js 文件,写入node脚本

// logs.js
const fs = require('fs');
const path = require('path');

let nowDate = new Date();
let today = String(nowDate.getFullYear()) + String((nowDate.getMonth() + 1)) + String(nowDate.getDate());
const errorLogPath = path.resolve(process.cwd(), './logs', `errors_${today}.log`);
const errorLogPathDir = path.resolve(process.cwd(), './logs');

module.exports = function(message) {
  try {
    // 判断日志目录是否存在
    fs.access(errorLogPathDir, fs.constants.F_OK, function(err) {
      if (err) {
        // 目录不存在
        fs.mkdirSync(errorLogPathDir, function(err) {
          if (err) {
            console.log('创建失败日志目录!');
            return false;
          }
          console.log('创建成功日志目录!');
        });
      } 
      // 目录存在
      fs.appendFileSync(errorLogPath, message + '\r\n', function(err) {
        if (err) {
          console.log(err);
        } else {
          console.log('写入错误成功!');
        }
      });
    });
  } catch(err) {
    console.log(err);
  }
}

2. 在axios二次封装文件中使用logs.js 脚本文件

// axios.js 
/**
 * 封装get方法
 * @param url
 * @param data
 * @returns {Promise}
 */
export function fetch(url, params = {}) {
  return new Promise((resolve, reject) => {
    axios
      .get(url, { params: params })
      .then((response) => {
        // 捕捉错误,生成错误日志,必须运行在服务端node环境
        if (process.server && !response.data.IsOK) {
          let logs = require('./log.js');
          logs(`get  IsOK=false  status=${response.status}  ` + url + ' ' + new Date());
          logs = null;
        }
        resolve(response.data)
      })
      .catch((err) => {
        // 捕捉错误,生成错误日志,必须运行在服务端node环境
        if (process.server) {
          let logs = require('./log.js');
          logs('get  ' + url + ' ' + new Date());
          logs = null;
        }
        reject(err)
      })
  })
}
一定要在服务端运行此logs脚本

3. 最后就直接运行项目就可以了,如果有报错就会自动在项目根目录下创建一个logs文件夹,然后生成当天的错误日志在这里插入图片描述


版权声明:本文为qq_40225369原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。