如何在项目中使用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 相关文章推荐
查询绑定数据岛的表格中的文本并修改显示方式的js代码
Dec 15 Javascript
JavaScript实现动态添加,删除行的方法实例详解
Jul 02 Javascript
jQuery实现tab选项卡效果的方法
Jul 08 Javascript
基于PHP和Mysql相结合使用jqGrid读取数据并显示
Dec 02 Javascript
一道JS前端闭包面试题解析
Dec 25 Javascript
JavaScrip常见的一些算法总结
Dec 28 Javascript
浅谈JS中json数据的处理
Jun 30 Javascript
深入理解JavaScript中的预解析
Jan 04 Javascript
JavaScript实现时钟滴答声效果
Jan 29 Javascript
基于VSCode调试网页JavaScript代码过程详解
Jul 20 Javascript
如何用Node.js编写内存效率高的应用程序
Apr 30 Javascript
微前端qiankun改造日渐庞大的项目教程
Jun 21 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
PHP学习笔记 IIS7下安装配置php环境
2012/10/29 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
mac系统下安装多个php并自由切换的方法详解
2017/04/21 PHP
Windows 下安装 swoole 图文教程(php)
2017/06/05 PHP
PHP获取链表中倒数第K个节点的方法
2018/01/18 PHP
Thinkphp5框架ajax接口实现方法分析
2019/08/28 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
XMLHTTPRequest的属性和方法简介
2010/11/23 Javascript
js 字符串转化成数字的代码
2011/06/29 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
移动Web中图片自适应的两种JavaScript解决方法
2015/06/18 Javascript
jquery转盘抽奖功能实现
2015/11/13 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
vue设置动态请求地址的例子
2019/11/01 Javascript
vue实现两个组件之间数据共享和修改操作
2020/11/12 Javascript
[02:08]2014DOTA2国际邀请赛 430专访:力争取得小组前二
2014/07/11 DOTA
用Python制作简单的朴素基数估计器的教程
2015/04/01 Python
Python httplib模块使用实例
2015/04/11 Python
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
python实现决策树、随机森林的简单原理
2018/03/26 Python
python3的输入方式及多组输入方法
2018/10/17 Python
python 多个参数不为空校验方法
2019/02/14 Python
聊聊python里如何用Borg pattern实现的单例模式
2019/06/06 Python
Python实现AI自动抠图实例解析
2020/03/05 Python
python 写函数在一定条件下需要调用自身时的写法说明
2020/06/01 Python
python 爬虫爬取京东ps4售卖情况
2020/12/18 Python
浅谈html5标签css3的常用样式
2016/10/20 HTML / CSS
CAT鞋加拿大官网:CAT Footwear加拿大
2020/08/05 全球购物
几道PHP的面试题
2012/05/19 面试题
如何使用PHP session
2015/04/21 面试题
房地产出纳岗位职责
2013/12/01 职场文书
出生医学证明样本
2014/01/17 职场文书
幼儿园优秀班主任事迹材料
2014/05/14 职场文书
四风问题查摆材料
2014/08/25 职场文书
2014年预备党员学习新党章思想汇报
2014/09/15 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书