如何在项目中使用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 模拟气泡屏保效果代码
Jul 10 Javascript
jquery显示和隐藏div特效实例
Feb 27 Javascript
js中prototype用法详细介绍
Nov 14 Javascript
JavaScript代码编写中各种各样的坑和填坑方法
Jun 06 Javascript
分享19个JavaScript 有用的简写写法
Jul 07 Javascript
关于vue.extend和vue.component的区别浅析
Aug 16 Javascript
2种简单的js倒计时方式
Oct 20 Javascript
Angular4的输入属性与输出属性实例详解
Nov 29 Javascript
JavaScript中call和apply方法的区别实例分析
Aug 03 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
记一次vue-webpack项目优化实践详解
Feb 17 Javascript
vue实现将数据存入vuex中以及从vuex中取出数据
Nov 08 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
JavaScript this调用规则说明
2010/03/08 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
使用BootStrap实现用户登录界面UI
2016/08/10 Javascript
原生js的RSA和AES加密解密算法
2016/10/08 Javascript
第一次接触神奇的前端框架vue.js
2016/12/01 Javascript
bootstrap datetimepicker日期插件超详细使用方法介绍
2017/02/23 Javascript
Jquery EasyUI $.Parser
2017/06/02 jQuery
微信小程序实现禁止分享代码实例
2019/10/19 Javascript
JS实现点击下拉列表文本框中出现对应的网址,点击跳转按钮实现跳转
2019/11/25 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
[07:59]2014DOTA2叨叨刀塔 林熊猫称被邀请赛现场盛况震撼
2014/07/21 DOTA
使用beaker让Facebook的Bottle框架支持session功能
2015/04/23 Python
Python多线程结合队列下载百度音乐的方法
2015/07/27 Python
学习python之编写简单简单连接数据库并执行查询操作
2016/02/27 Python
python 简单的绘图工具turtle使用详解
2017/06/21 Python
Python图形绘制操作之正弦曲线实现方法分析
2017/12/25 Python
对Pytorch神经网络初始化kaiming分布详解
2019/08/18 Python
pandas 缺失值与空值处理的实现方法
2019/10/12 Python
python3注册全局热键的实现
2020/03/22 Python
Python通过Pillow实现图片对比
2020/04/29 Python
vscode配置anaconda3的方法步骤
2020/08/08 Python
python 6行代码制作月历生成器
2020/09/18 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
美国室内和室外装饰花盆购物网站:ePlanters
2019/03/22 全球购物
SOA面试题:如何在SOA中实现松耦合
2013/07/21 面试题
大专生工程监理求职信
2013/10/04 职场文书
实习生自荐信范文
2013/11/13 职场文书
建筑院校毕业生求职信
2014/06/13 职场文书
小学生清明节演讲稿
2014/09/05 职场文书
2014年关工委工作总结
2014/11/17 职场文书
2015学习委员工作总结范文
2015/04/03 职场文书
老公出轨后的保证书
2015/05/08 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
Pytorch中Softmax和LogSoftmax的使用详解
2021/06/05 Python
JavaScript 反射学习技巧
2021/10/16 Javascript
浅谈redis的过期时间设置和过期删除机制
2022/03/18 MySQL