Koa2中的log4js自定义中间件

日志自定义处理

先安装插件

npm install log4js

自定义

const log4js = require("log4js");
const 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

log4js.configure({
    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'
        }
    },
})

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)
        }
    }
}

使用  

const Koa = require("koa")
const app = new Koa();    //创建服务器

app.use(logger());  //日志记录

文件位置

  • 8
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值