const dayjs = require("dayjs"); const fs = require("fs"); const path = require("path"); let formatText = { request: function (req) { let logText = new String(); let method = req.method; //访问方法 logText += "request method: " + method + "\n"; //请求原始地址 logText += "request originalUrl: " + req.originalUrl + "\n"; //客户端ip logText += "request client ip: " + req.ip + "\n"; //请求参数 if (method === "GET") { logText += "request query: " + JSON.stringify(req.query) + "\n"; } else { logText += "request body: " + "\n" + JSON.stringify(req.body) + "\n"; } return logText; }, handle: (info) => { let logText = new String(); //响应日志开始 logText += "\n" + `***************info log start ***************日志记录时间: ${dayjs().format("YYYY.MM.DD HH:mm:ss")}` + "\n"; //响应内容 logText += "\n" + info + "\n"; //响应日志结束 logText += "*************** info log end ***************************************************************************" + "\n"; return logText; }, error: (ctx, err) => { let logText = new String(); //错误信息开始 logText += "\n" + `*************** error log start ***************日志记录时间: ${dayjs().format("YYYY.MM.DD HH:mm:ss")}` + "\n"; //添加请求日志 logText += formatText.request(ctx.request); //错误名称 logText += "err name: " + err.name + "\n"; //错误信息 logText += "err message: " + err.message + "\n"; //错误详情 logText += "err stack: " + err.stack + "\n"; //错误信息结束 logText += "*************** error log end ***************************************************************************" + "\n"; return logText; }, }; const writeLog = (msg, type) => { console.log(msg); let pathDir = path.join(__dirname, "../logs"); if (!fs.existsSync(pathDir)) { fs.mkdirSync(pathDir); } let fileName = dayjs().format("log_YYYY.MM.DD.log"); if (type === "error") { fileName = dayjs().format("logError_YYYY.MM.DD.log"); } let fileFullPath = path.join(pathDir, fileName); if (fs.existsSync(fileFullPath)) { fs.appendFileSync(fileFullPath, msg); } else { fs.writeFileSync(fileFullPath, msg); } }; module.exports = { //封装操作日志 log: (msg, data) => { let msgTotal = msg; if (data) { if (typeof data === "object") { msgTotal += ":" + JSON.stringify(data); } else { msgTotal += ":" + data; } } let msgStr = formatText.handle(msgTotal); writeLog(msgStr); }, errError(msg) { let msgStr = formatText.handle(msg); writeLog(msgStr, "error"); }, //封装错误日志 ctxError: (error, ctx) => { if (ctx && error) { let msg = formatText.error(ctx, error); writeLog(msg, "error"); } }, };