返回
Egg.js中自定义请求级别日志,满足统一日志管理规范
前端
2023-09-24 21:03:58
在统一日志管理规范中,请求级别的日志需要包含特定的字段,比如请求时间、请求方法、请求路径、请求参数、请求头等信息。这些信息对于追踪和分析系统问题至关重要。
而Egg.js默认的请求日志格式并不能满足这些需求,因此我们需要对其进行自定义。
Egg.js提供了一种方便的方法来自定义日志格式,可以通过在配置文件中配置logger选项来实现。
logger: {
// 设置日志输出到文件
consoleLevel: 'INFO',
file: true,
// 设置日志输出路径
dir: 'logs',
// 自定义日志格式
formatter: async (ctx) => {
const ip = ctx.get('x-real-ip') || ctx.ip;
const method = ctx.method;
const url = ctx.url;
const status = ctx.status;
const elapsed = Date.now() - ctx.start;
// 自定义日志格式,包含请求的相关信息
return `${ip} - ${method} ${url} - ${status} - ${elapsed}ms`;
}
}
通过上面的配置,我们可以将日志输出到文件,并自定义日志格式。日志中包含了请求的IP地址、请求方法、请求路径、请求状态和请求耗时等信息。
自定义的日志格式需要满足统一日志管理规范的要求,这样才能实现集中收集和分析日志的目的。
除了自定义日志格式之外,我们还可以通过Egg.js的logger中间件来记录更多的日志信息,比如请求参数、请求头等。
const logger = require('egg-logger').logger;
// 自定义日志中间件
module.exports = () => {
return async function loggerMiddleware(ctx, next) {
// 记录请求开始时间
ctx.start = Date.now();
// 调用下一个中间件
await next();
// 记录请求结束时间
ctx.end = Date.now();
// 记录请求相关信息
const ip = ctx.get('x-real-ip') || ctx.ip;
const method = ctx.method;
const url = ctx.url;
const status = ctx.status;
const elapsed = ctx.end - ctx.start;
const requestParams = ctx.request.body;
const requestHeaders = ctx.request.headers;
// 使用logger记录日志
logger.info(`[${ip}] - [${method}] - [${url}] - [${status}] - [${elapsed}ms] - [${JSON.stringify(requestParams)}] - [${JSON.stringify(requestHeaders)}]`);
};
};
通过自定义日志中间件,我们可以记录更多与请求相关的日志信息,便于系统问题的追踪和分析。
自定义请求级别的日志,可以让日志管理系统收集和分析更全面的日志信息,从而为运维和开发人员提供更好的决策支持。