expresjs+log4js+pm2 记录API调用日志

1 篇文章 0 订阅
1 篇文章 0 订阅

API调用日志记录方案

  1. log4js
    log4js提供了完整的JavaScript日志记录方案,要将日志存储到文件中,需要修改log4js的默认配置.
  var logger = require('log4js');
  // log4js 配置
  logger.configure({
    pm2: true, // 结合pm2日志输出
    pm2InstanceVar: 'www', // pm2 启动脚本入口
    disableClustering: true, // pm2集群模式时,log4js不打印日志,禁用集群模式
    replaceConsole: true,
    level: 'WARN',
    appenders: {
      app: {
        type: "file", //配置日志输出到文件中
        filename: '../logs/app.log' // 日志输出文件路径
      }
    },
    categories: {
      default: {
        appenders: ["app"],
        level: 'WARN'
      }
    }
  });
  1. node-http-proxy代理API请求
    使用ExpressJS作为服务端,使用node-http-proxy作为代理中间件.
    node-http-proxy提供了proxyRes事件监听来自后端的请求响应结果,但是http 响应式以数据流的形式,所以必须要把数据流全部接收完毕之后,才能对返回的请求结果进行分析和记录.
    ExpressJS提供了app.use(router)路由拦截方法,我们只要提供一个日志拦截路由即可.
module.exports = function (options, context) {
  var express = require('express');
  var router = express.Router();
  var logger = require('log4js').getLogger('API');

  var proxy = context.getResource('proxy');
  proxy.on('proxyReq', function(proxyReq, req) {
    // handle request
  });
  proxy.on('proxyRes', function(proxyRes, req, res) {
    // 需要修改Response结果, 排除上传,下载等特殊接口, 只记录普通接口
    if (proxyRes.headers['content-type'] !== 'application/json;charset=utf-8') {
      return;
    }
    // 持续接收服务端数据直到结束
    let body = [];
    proxyRes.on('data', function (chunk) {
      body.push(chunk)
    })
    proxyRes.on('end', function () {
      body = Buffer.concat(body).toString()
      // 记录请求url与返回结果
      logger.info(`Requested url: "${req.url}" response data: ${body}`)
    })
  });
  router.use(function (req, res, next) {
    // node-http-proxy 代理转发
    proxy.web(req, res);
  });
  return router;
}
  1. PM2 日志管理
    首先,启用PM2的ecosystem配置文件。
  pm2 ecosystem

ecosystem.config.js

module.exports = {
  apps : [{
    name: "app",
    script: "./www",
    env: {
      NODE_ENV: "development",
    },
    env_production: {
      NODE_ENV: "production",
	},
	error_file:../logs/error.log’, // 错误日志
	out_file:../logs/out.log’, // 输出日志
	combine_logs:true // 启动多个实例时,合并日志文件,不按照实例id生成日志文件
  }]
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值