如何在项目中使用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 相关文章推荐
jQuery源码分析-03构造jQuery对象-工具函数
Nov 14 Javascript
JS自定义功能函数实现动态添加网址参数修改网址参数值
Aug 02 Javascript
JavaScript Promise启示录
Aug 12 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
Mar 13 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 Javascript
如何在Linux上安装Node.js
Apr 01 Javascript
json对象与数组以及转换成js对象的简单实现方法
Jun 24 Javascript
JavaScript类型系统之布尔Boolean类型详解
Jun 26 Javascript
JS基于正则实现数字千分位用逗号分隔的方法
Jun 16 Javascript
实现两个文本框同时输入的实例
Sep 25 Javascript
gulp安装以及打包合并的方法教程
Nov 19 Javascript
vuex根据不同的用户权限展示不同的路由列表功能
Sep 20 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的论坛(4)
2006/10/09 PHP
一些使用频率比较高的php函数
2008/10/03 PHP
让CodeIgniter数据库缓存自动过期的处理的方法
2014/06/12 PHP
php中获取主机名、协议及IP地址的方法
2014/11/18 PHP
php计算两个文件相对路径的方法
2015/03/14 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
php实现对象克隆的方法
2015/06/20 PHP
laravel框架分组控制器和分组路由实现方法示例
2020/01/25 PHP
firefox firebug中文入门教程 脚本之家新年特别版
2010/01/02 Javascript
腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口
2010/07/26 Javascript
js中关于String对象的replace使用详解
2011/05/24 Javascript
将HTML格式的String转化为HTMLElement的实现方法
2014/08/07 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JavaScript实现简单的数字倒计时
2015/05/15 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
jQuery+ajax读取并解析XML文件的方法
2016/09/09 Javascript
p5.js入门教程之键盘交互
2018/03/19 Javascript
JS实现电话号码的字母组合算法示例
2019/02/26 Javascript
element-ui中Table表格省市区合并单元格的方法实现
2019/08/07 Javascript
JS面向对象之单选框实现
2020/01/17 Javascript
python发布模块的步骤分享
2014/02/21 Python
python中使用enumerate函数遍历元素实例
2014/06/16 Python
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
Python编程给numpy矩阵添加一列方法示例
2017/12/04 Python
python代码实现ID3决策树算法
2017/12/20 Python
Scrapy基于selenium结合爬取淘宝的实例讲解
2018/06/13 Python
python让列表倒序输出的实例
2018/06/25 Python
Python爬虫之正则表达式的使用教程详解
2018/10/25 Python
python 随机森林算法及其优化详解
2019/07/11 Python
解决Tensorflow 内存泄露问题
2020/02/05 Python
Python yield生成器和return对比代码实例
2020/04/20 Python
美国知名奢侈美容品牌零售商:Cos Bar
2017/04/21 全球购物
工程造价专业大专生求职信
2013/10/06 职场文书
实名检举信范文
2015/03/02 职场文书
《社戏》教学反思
2016/02/22 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python