如何在项目中使用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 相关文章推荐
javascript中的location用法简单介绍
Mar 07 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
Apr 07 Javascript
js 控制下拉菜单刷新的方法
Mar 03 Javascript
jQuery遍历Table应用示例
Apr 09 Javascript
JS创建类和对象的两种不同方式
Aug 08 Javascript
JavaScript 事件绑定及深入
Apr 13 Javascript
简介AngularJS中使用factory和service的方法
Jun 17 Javascript
swtich/if...else的替代语句
Aug 16 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
Nov 07 Javascript
jQuery实现div跟随鼠标移动
Aug 20 jQuery
RxJS在TypeScript中的简单使用详解
Apr 13 Javascript
详解JavaScript匿名函数和闭包
Jul 10 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
德生S2000电路分析
2021/03/02 无线电
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
php中错误处理操作实例分析
2019/08/23 PHP
JS高级拖动技术 setCapture,releaseCapture
2011/07/31 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
javascript克隆对象深度介绍
2012/11/20 Javascript
jquery实现弹出层完美居中效果
2014/03/03 Javascript
javascript:void(0)的问题使用探讨
2014/04/10 Javascript
js HTML5 Ajax实现文件上传进度条功能
2016/02/13 Javascript
Angular 向组件传递模板的两种方法
2018/02/23 Javascript
js将键值对字符串转为json字符串的方法
2018/03/30 Javascript
在Mac下彻底卸载node和npm的方法
2018/05/16 Javascript
基于NodeJS开发钉钉回调接口实现AES-CBC加解密
2020/08/20 NodeJs
[22:20]初生之犊-TI4第5名LGD战队纪录片
2014/08/13 DOTA
[06:49]2018DOTA2国际邀请赛寻真——VirtusPro傲视群雄
2018/08/12 DOTA
Python写的Discuz7.2版faq.php注入漏洞工具
2014/08/06 Python
Python实现将HTML转成PDF的方法分析
2019/05/04 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
python与pycharm有何区别
2020/07/01 Python
Pandas中DataFrame交换列顺序的方法实现
2020/12/14 Python
Python 图片处理库exifread详解
2021/02/25 Python
详解如何在css3打包后自动追加前缀插件:autoprefixer
2018/12/18 HTML / CSS
详解快速开发基于 HTML5 网络拓扑图应用
2018/01/08 HTML / CSS
俄罗斯连接商品和买家的在线平台:goods.ru
2020/11/30 全球购物
会计助理的岗位职责
2013/11/29 职场文书
预备党员入党自我评价范文
2014/03/10 职场文书
小学生操行评语
2014/04/22 职场文书
说好普通话圆梦你我他演讲稿
2014/09/21 职场文书
2014年反腐倡廉工作总结
2014/12/05 职场文书
2014年街道办事处工作总结
2014/12/11 职场文书
护士个人总结范文
2015/02/13 职场文书
团员个人总结
2015/02/26 职场文书
2016暑期社会实践心得体会范文
2016/01/14 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
HashMap实现保存两个key相同的数据
2021/06/30 Java/Android