koa2搭配log4js實現日誌監控|8月更文挑戰

安裝node環境

由於此框架是基於node.js的,安裝node是必須的進行的第一步,這裏再也不詳細介紹node

  • 當前環境

image.png

安裝koa(咱們使用淘寶鏡像進行安裝)

# 全局安裝koa腳手架
cnpm install koa-generator -g

# 建立新項目
koa2 my_server

# 打開新建的項目
cd my_server

# 安裝依賴
yarn
複製代碼

安裝完成後,執行npm dev,瀏覽器輸入localhost:3000,展現以下頁面,即koa2環境搭建成功web

  • 控制檯

image.png

  • 瀏覽器

image.png

入口文件在 bin/www 裏面npm

安裝logjs插件

npm的log4js文檔地址瀏覽器

image.png 安裝log4jsmarkdown

npm install log4js
# 或者
yarn add log4js
複製代碼

配置log4js

image.png

建立一個utils文件夾,建立log4j.jsapp

註釋都在代碼上面,有啥問題歡迎騷擾我框架

/**
 * 日誌存儲
 * @auther 何小玍。
 * @time 2021/07/28 22:11
 */
const log4j = require('log4js')
const levels = {
    'trace'     : log4j.levels.TRACE,
    'debug'     : log4j.levels.DEBUG,
    'info'      : log4j.levels.INFO,
    'warn'      : log4j.levels.WARN,
    'error'     : log4j.levels.ERROR,
    'fatal'     : log4j.levels.FATAL
}

// log4j配置
log4j.configure({
    appenders: {
        console: { type: 'console' },
        info: {
            type: 'file',
            filename: 'logs/all-logs.log'
        },
        error: {
            type: 'dateFile',
            filename: 'logs/log',
            pattern: 'yyyy-MM-dd.log',
            alwaysIncludePattern: true      // 設置文件名稱爲 filename + pattern
        }
    },
    categories: {
        default: {
            appenders: [ 'console' ],
            level: 'debug'
        },
        info: {
            appenders: [ 'info', 'console' ],
            level: 'info'
        },
        error: {
            appenders: [ 'error', 'console' ],
            level: 'error'
        }
    }
})

/**
 * 日誌輸出 level爲bug
 * @param { string } content
 */
exports.debug = ( content ) => {
    let logger = log4j.getLogger('debug')
    logger.level = levels.debug
    logger.debug(content)
}

/**
 * 日誌輸出 level爲info
 * @param { string } content
 */
 exports.info = ( content ) => {
    let logger = log4j.getLogger('info')
    logger.level = levels.info
    logger.info(content)
}

/**
 * 日誌輸出 level爲error
 * @param { string } content
 */
 exports.error = ( content ) => {
    let logger = log4j.getLogger('error')
    logger.level = levels.error
    logger.error(content)
}
複製代碼

定義util.js文件,作通用工具函數庫

/**
 * 通用函數封裝
 * @auther 何小玍。
 * @time 2021/07/28 22:07
 */
const log4j = require('./log4j')
const CODE = {
    SUCCESS: 200,               // 成功
    PARAM_ERROR: 10001,         // 參數錯誤
    USER_ACCOUNT_ERROR: 20001,  // 帳號或密碼錯誤
    USER_LOGIN_ERROR: 30001,    // 用戶未登陸
    BUSINESS_ERROR: 40001,      // 業務請求失敗
    AUTH_ERROR: 50001,          // 認證失敗或TOKEN過時
}

module.exports = {
    /**
     * 分頁結構封裝
     * @param { number } pageNum        每頁數量
     * @param { number } pageSize       當前頁碼
     */
    pager({ pageNum = 1, pageSize = 1 }) {
        pageNum *= 1
        pageSize *= 1
        const skipIndex = (pageNum - 1) * pageSize      // 當前所翻頁數
        return {
            page: {
                pageNum,
                pageSize
            },
            skipIndex
        }
    },

    // 成功回調
    success(data = '', msg = '', code = CODE.SUCCESS) {
        log4j.debug(data)
        return { code, data, msg }
    },

    // 失敗回調
    fail(data = '', msg = '', code = CODE>BUSINESS_ERROR) {
        log4j.debug(msg)
        return { code, data, msg }
    },

    // 把狀態碼暴露全局
    CODE
}
複製代碼

至此,log4j的封裝已完成,就能夠直接調用了

在app.js裏面加入兩句話,實時打印get請求和post請求koa

// logger  中間件
app.use(async (ctx, next) => {
  log4j.info(`get: ${ JSON.stringify(ctx.request.query) }`)         // 監聽get請求
  log4j.info(`params: ${ JSON.stringify(ctx.request.body) }`)       // 監聽post請求
  const start = new Date()
  await next()
  const ms = new Date() - start
  console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
})
複製代碼

而後運行npm dev, 在瀏覽器打開localhost:3000,就能看到項目自動生成一個log文件夾,裏面有着日誌信息async

image.png

最後最後:

公衆號:小何成長,佛系更文,都是本身曾經踩過的坑或者是學到的東西函數

有興趣的小夥伴歡迎關注我哦,我是:何小玍。 你們一塊兒進步鴨

相關文章
相關標籤/搜索