场景-日志记录

58 阅读1分钟
  1. 日志记录功能说明:
    1. 日志记录时机

      • 在请求被处理之后记录(因为先调用next()
      • 这样可以确保不阻塞请求处理流程
    2. 记录内容

      • 请求方法 (req.method):GET/POST/PUT/DELETE等
      • 请求路径 (req.path):访问的URL路径
    3. 日志级别

      • 使用debug级别记录,适合记录调试信息
      • 可以根据需要改为info或其他级别
const log4js = require("log4js");
const path = require("path");

function getCommonAppender(pathSeg) {
    return {
        //定义一个sql日志出口
        type: "dateFile",
        filename: path.resolve(__dirname, "logs", pathSeg, "logging.log"),
        maxLogSize: 1024 * 1024, //配置文件的最大字节数
        keepFileExt: true,
        daysToKeep: 3,
        layout: {
            type: "pattern",
            pattern: "%c [%d{yyyy-MM-dd hh:mm:ss}] [%p]: %m%n",
        },
    };
}

log4js.configure({
    appenders: {
        sql: getCommonAppender("sql"),
        default: {
            type: "stdout",
        },
        api: getCommonAppender("api"),
    },
    categories: {
        sql: {
            appenders: ["sql"], //该分类使用出口sql的配置写入日志
            level: "all",
        },
        default: {
            appenders: ["default"],
            level: "all",
        },
        api: {
            appenders: ["api"],
            level: "all",
        },
    },
});

process.on("exit", () => {
    log4js.shutdown();
});

exports.sqlLogger = log4js.getLogger("sql");
exports.logger = log4js.getLogger();
exports.apiLogger = log4js.getLogger("api");

中间件 apiLoggerMid.js

const { apiLogger } = require("../logger.js");

module.exports = (req, res, next) => {
    next();
    apiLogger.debug(`${req.method} ${req.path} ${req.ip}`);
};

或:

const { apiLogger } = require("../logger.js");
const log4js = require("log4js");
module.exports = log4js.connectLogger(apiLogger,{
  level:"auto",
});