如何在项目中使用log4.js的方法步骤


Posted in Javascript onJuly 16, 2019

pm2中自带的日志内容是不能满足日常的需求的,因此需要在项目中加上日志管理,这里研究了下log4的使用方法,效果挺好的,想要查看的都可以找到,记录下简单的使用步骤

log4的配合

// config.js

let path = require('path');

// 日志根目录
let baseLogPath = path.resolve(__dirname, '../../../logs');
// 请求日志目录
let reqPath = '/request';
// 请求日志文件名
let reqFileName = 'request';
// 请求日志输出完整路径
let reqLogPath = baseLogPath + reqPath + '/' + reqFileName;


// 响应日志目录
let resPath = '/response';
// 响应日志文件名
let resFileName = 'response';
// 响应日志输出完整路径
let resLogPath = baseLogPath + resPath + '/' + resFileName;

// 错误日志目录
let errPath = '/error';
// 错误日志文件名
let errFileName = 'error';
// 错误日志输出完整路径
let errLogPath = baseLogPath + errPath + '/' + errFileName;


module.exports = {
  appenders: {
    // 所有的日志
    'console': {type: 'console'},
    // 请求日志
    'reqLogger': {
      type: 'dateFile', // 日志类型
      filename: reqLogPath, // 输出文件名
      pattern: '-yyyy-MM-dd-hh.log', // 后缀
      alwaysIncludePattern: true, // 上面两个参数是否合并
      encoding: 'utf-8', // 编码格式
      maxLogSize: 1000, // 最大存储内容
    },
    // 响应日志
    'resLogger': {
      type: 'dateFile',
      filename: resLogPath,
      pattern: '-yyyy-MM-dd-hh.log',
      alwaysIncludePattern: true,
      encoding: 'utf-8',
      maxLogSize: 1000,
    },
    // 错误日志
    'errLogger': {
      type: 'dateFile',
      filename: errLogPath,
      pattern: '-yyyy-MM-dd-hh.log',
      alwaysIncludePattern: true,
      encoding: 'utf-8',
      maxLogSize: 1000,
    }
  },
  // 分类以及日志等级
  categories: {
    default: {
      appenders: ['console'],
      level: 'all'
    },
    reqLogger: {
      appenders: ['reqLogger'],
      level: 'info'
    },
    resLogger: {
      appenders: ['resLogger'],
      level: 'info'
    },
    errLogger: {
      appenders: ['errLogger'],
      level: 'error'
    }
  },
}

log4的日志封装

这里是把log4封装成一个中间件,在app.js中直接调用就可以了

// 先安装log4js

// log4.js

const log4Config = require('./config')
const log4js = require('log4js')

// 调用配置文件
log4js.configure(log4Config)


class CommonHandle {
  constructor(){}
  // 格式化请求日志
  static formatReqLog(ctx, time){
    let text = '------------request start------------'
    let method = ctx.method
    text += `request method: ${method} \n request url: ${ctx.originalUrl } \n`

    if(method = 'GET'){
      text += `request data: ${JSON.stringify(ctx.query)} \n`
    }else{
      text += `request data: ${JSON.stringify(ctx.body)} \n`
    }
    text += `ctx all: ${JSON.stringify(ctx)}`
    return text
  }
  // 格式化相应日志
  static formatResLog(ctx,time){
    let text = '------------response start------------'
    text += `response result: ${JSON.stringify(ctx.response.body)} \n`

    text += `response all: ${JSON.stringify(ctx)} \n`

    text += `response time: ${time} \n`
    return text
  }
  // 格式化错误日志
  static formatErrorLog(ctx,error,time){
    let text = '------------error start------------'
    text += this.formatResLog(ctx,time)
    text += `error content: ${JSON.stringify(error)}`

    return text
  }
}

class HandleLogger extends CommonHandle{
  constructor(){
    super()
  }

  // 请求日志
  static reqLogger(ctx){
    log4js.getLogger('reqLogger').info(this.formatReqLog(ctx))
  }

  // 相应日志
  static resLogger(ctx, time){
    log4js.getLogger('resLogger').info(this.formatResLog(ctx,time))
  }

  // 错误日志
  static errorLogger(ctx, error, time){
    log4js.getLogger('errLogger').info(this.formatErrorLog(ctx,error,time))
  }

}





module.exports = (options) => {
  return async (ctx,next) => {
    const startTime = new Date()
    let period;
    try{
      // 请求日志
      HandleLogger.reqLogger(ctx)
      await next()
      period = new Date() - startTime
      // 响应日志
      HandleLogger.resLogger(ctx,period)
    }catch(err){
      period = new Date() - startTime
      // 错误日志
      HandleLogger.errorLogger(ctx, err, period)
    }
  }
}

调用封装好的日志函数

这里直接以中间件的形式调用就可以了

// app.js

const Koa = require('koa')
const app = new Koa()
const LogJS = require('./common/log/log4')

// log4.js引入
app.use(LogJS())

最后部署上线之后就能直接在根目录下的logs文件夹下查看对应的日志内容。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
可在线编辑网页文字效果代码(单击)
Mar 02 Javascript
用jquery存取照片的具体实现方法
Jun 30 Javascript
javascript 10进制和62进制的相互转换
Jul 31 Javascript
浅谈JavaScript字符串拼接
Jun 25 Javascript
基于jQuery实现仿百度首页选项卡切换效果
May 29 Javascript
jquery mobile实现可折叠的导航按钮
Mar 11 Javascript
详解windows下vue-cli及webpack 构建网站(二)导入bootstrap样式
Jun 17 Javascript
浅谈vue.js中v-for循环渲染
Jul 26 Javascript
JS实现的加减乘除四则运算计算器示例
Aug 09 Javascript
微信小程序实现获取自己所处位置的经纬度坐标功能示例
Nov 30 Javascript
解决vue的 v-for 循环中图片加载路径问题
Sep 03 Javascript
Vue Render函数原理及代码实例解析
Jul 30 Javascript
JAVA面试题 static关键字详解
Jul 16 #Javascript
微信小程序实现下拉框功能
Jul 16 #Javascript
javascript中的this作用域详解
Jul 15 #Javascript
微信小程序页面上下滚动效果
Nov 18 #Javascript
node.js实现上传文件功能
Jul 15 #Javascript
js canvas实现5张图片合成一张图片
Jul 15 #Javascript
js使用文件流下载csv文件的实现方法
Jul 15 #Javascript
You might like
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
php打开文件fopen函数的使用说明
2013/07/05 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
JavaScript去除空格的几种方法
2006/10/03 Javascript
初学JavaScript第二章
2008/09/30 Javascript
javascript 获取页面的高度及滚动条的位置的代码
2010/05/06 Javascript
JavaScript高级程序设计 读书笔记之十一 内置对象Global
2012/03/07 Javascript
中文路径导致unitpngfix.js不正常的解决方法
2013/06/26 Javascript
JS实现选中当前菜单后高亮显示的导航条效果
2015/10/15 Javascript
js获取鼠标位置实例详解
2015/12/09 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
jQuery与JavaScript节点创建方法的对比
2016/11/18 Javascript
详解如何在 vue 项目里正确地引用 jquery 和 jquery-ui的插件
2017/06/01 jQuery
VueJS 集成 Medium Editor的示例代码 (自定义编辑器按钮)
2017/08/24 Javascript
解决Vue中mounted钩子函数获取节点高度出错问题
2018/05/18 Javascript
浅析Vue.js中v-bind v-model的使用和区别
2018/12/04 Javascript
js实现省级联动(数据结构优化)
2020/07/17 Javascript
google广告之另类js调用实现代码
2020/08/22 Javascript
[45:25]完美世界DOTA2联赛循环赛 PXG vs IO 第一场 11.06
2020/11/09 DOTA
Python设计模式之代理模式实例
2014/04/26 Python
Python第三方库face_recognition在windows上的安装过程
2019/05/03 Python
python中时间模块的基本使用教程
2019/05/14 Python
python 多进程并行编程 ProcessPoolExecutor的实现
2019/10/11 Python
Django websocket原理及功能实现代码
2020/11/14 Python
matplotlib 范围选区(SpanSelector)的使用
2021/02/24 Python
下面这个程序执行后会有什么错误或者效果
2014/11/03 面试题
教学实验楼管理制度
2014/02/01 职场文书
服务质量承诺书
2014/03/27 职场文书
2015大学生实训报告
2014/11/05 职场文书
房屋认购协议书
2015/01/29 职场文书
小石潭记导游词
2015/02/03 职场文书
学校推普周活动总结
2015/05/07 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
老人节主持词
2015/07/04 职场文书
一文搞懂Python Sklearn库使用
2021/08/23 Python
教你如何用cmd快速登录服务器
2022/06/10 Servers