如何在项目中使用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 event事件在IE、FF兼容性问题
Jan 01 Javascript
Javascript 面试题随笔
Mar 31 Javascript
浅谈javascript的Array.prototype.slice.call
Aug 31 Javascript
js随机生成字母数字组合的字符串 随机动画数字
Sep 02 Javascript
jquery实现初次打开有动画效果的网页TAB切换代码
Sep 06 Javascript
五种js判断是否为整数类型方式
Dec 03 Javascript
JavaScript隐式类型转换
Mar 15 Javascript
angularjs中ng-bind-html的用法总结
May 23 Javascript
vue组件从开发到发布的实现步骤
Nov 11 Javascript
如何正确理解vue中的key详解
Nov 02 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
JavaScript中this的学习笔记及用法整理
Feb 17 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
无线电的诞生过程
2021/03/01 无线电
php 搜索框提示(自动完成)实例代码
2012/02/05 PHP
ie与session丢失(新窗口cookie丢失)实测及解决方案
2013/07/15 PHP
php字符编码转换之gb2312转为utf8
2013/10/28 PHP
php实现爬取和分析知乎用户数据
2016/01/26 PHP
PHP文件缓存smarty模板应用实例分析
2016/02/26 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
[原创]网络复制内容时常用的正则+editplus
2006/11/30 Javascript
直接生成打开窗口代码,不必下载
2008/05/14 Javascript
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
基于JavaScript实现继承机制之原型链(prototype chaining)的详解
2013/05/07 Javascript
不使用浏览器运行javascript代码的方法
2013/07/24 Javascript
JS分页效果示例
2013/10/11 Javascript
Mac OS X 系统下安装和部署Egret引擎开发环境
2014/09/03 Javascript
jQuery中index()方法用法实例
2014/12/27 Javascript
JavaScript Function函数类型介绍
2015/04/08 Javascript
浅谈Javascript线程及定时机制
2015/07/02 Javascript
JavaScript运动减速效果实例分析
2015/08/04 Javascript
创建一个类Person的简单实例
2016/05/17 Javascript
javascript淘宝主图放大镜功能
2016/10/20 Javascript
Bootstrap入门教程一Hello Bootstrap初识
2017/03/02 Javascript
谈谈VUE种methods watch和compute的区别和联系
2017/08/01 Javascript
webpack学习笔记之优化缓存、合并、懒加载
2017/08/24 Javascript
通过JS判断网页是否为手机打开
2020/10/28 Javascript
python中cPickle用法例子分享
2014/01/03 Python
python获得两个数组交集、并集、差集的方法
2015/03/27 Python
常见python正则用法的简单实例
2016/06/21 Python
python 常见字符串与函数的用法详解
2018/11/23 Python
利用python计算时间差(返回天数)
2019/09/07 Python
优秀高中生事迹材料
2014/02/11 职场文书
交通事故协议书
2014/04/15 职场文书
四风问题民主生活会对照检查材料思想汇报
2014/09/27 职场文书
优秀校长事迹材料
2014/12/24 职场文书
社区重阳节活动总结
2015/03/24 职场文书
GoFrame基于性能测试得知grpool使用场景
2022/06/21 Golang