如何在项目中使用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通过select列表选择框对表格数据进行过滤示例
May 07 Javascript
js事件绑定快捷键以ctrl+k为例
Sep 30 Javascript
Javascript中arguments和arguments.callee的区别浅析
Apr 24 Javascript
JQuery插件jcarousellite的参数中文说明
May 11 Javascript
JS+CSS实现简易的滑动门效果代码
Sep 24 Javascript
JS中生成随机数的用法及相关函数
Jan 09 Javascript
AngularJS 实现点击按钮获取验证码功能实例代码
Jul 13 Javascript
Express使用html模板的详细代码
Sep 18 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
Dec 29 Javascript
原生js实现each方法实例代码详解
May 27 Javascript
JQuery使用属性addClass、removeClass和toggleClass实现增加和删除类操作示例
Nov 18 jQuery
ant design vue 表格table 默认勾选几项的操作
Oct 31 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动态图像的创建
2006/10/09 PHP
PHP 截取字符串专题集合
2010/08/19 PHP
php中的ini配置原理详解
2014/10/14 PHP
php实现阿拉伯数字和罗马数字相互转换的方法
2015/04/17 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
YII2.0框架行为(Behavior)深入详解
2019/07/26 PHP
关于UTF-8的客户端用AJAX方式获取GB2312的服务器端乱码问题的解决办法
2010/11/30 Javascript
js三种排序算法分享
2012/08/16 Javascript
JS 删除字符串最后一个字符的实现代码
2014/02/20 Javascript
js判断url是否有效的两种方法
2014/03/04 Javascript
轻松掌握JavaScript单例模式
2016/08/25 Javascript
详解AngularJS中的表单验证(推荐)
2016/11/17 Javascript
JavaScript 控制字体大小设置的方法
2016/11/23 Javascript
关于ES6的六个小特性(二)
2017/02/20 Javascript
微信小程序tabBar用法实例详解
2017/12/04 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
layer.close()关闭进度条和Iframe窗的方法
2018/08/17 Javascript
JavaScript函数、闭包、原型、面向对象学习笔记
2018/09/06 Javascript
vue+element项目中过滤输入框特殊字符小结
2019/08/07 Javascript
在layui中使用form表单监听ajax异步验证注册的实例
2019/09/03 Javascript
nuxt.js添加环境变量,区分项目打包环境操作
2020/11/06 Javascript
[41:41]TFT vs Secret Supermajor小组赛C组 BO3 第一场 6.3
2018/06/04 DOTA
python批量修改文件后缀示例代码分享
2013/12/24 Python
详解Django中CBV(Class Base Views)模型源码分析
2019/02/25 Python
python 采用paramiko 远程执行命令及报错解决
2019/10/21 Python
python set集合使用方法解析
2019/11/05 Python
用sleep间隔进行python反爬虫的实例讲解
2020/11/30 Python
python实现三种随机请求头方式
2021/01/05 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
美国在线宠物商店:Chewy
2019/01/12 全球购物
介绍一下write命令
2012/09/24 面试题
努力学习演讲稿
2014/05/10 职场文书
机械电子工程专业自荐书
2014/06/10 职场文书
2015年元宵节活动总结
2015/02/06 职场文书
四群教育工作总结
2015/08/10 职场文书