这是我参与更文挑战的第 11 天,活动详情查看: 更文挑战前端
Lynne,一个能哭爱笑永远少女心的前端开发工程师。身处互联网浪潮之中,热爱生活与技术。web
实现一个 KOA 中间件,第一篇已经讲过了日志中间件中的 设置信息段和获取配置后的log4js对象。服务器
今天就来说一讲 最关键的模块 --- log日志中间件开发(logger.js)markdown
一句话来讲就是,主要利用中间件能够访问请求和响应内容,输出上下文中的请求和响应中的日志内容。app
export default (options) => {
const contextLogger = {}; //后期赋值给ctx.log
const { env, appLogLevel, dir, serverIp, projectName } = Object.assign({}, baseInfo, options || {});
// 取出通用配置(项目名,服务器请求IP)
const commonInfo = { projectName, serverIp };
// 上一节介绍的函数模块 - 通用获取配置后的log4js对象
const logger = getLog({env, appLogLevel, dir},'cheese');
return async (ctx, next) => {
const start = Date.now(); //日志记录开始时间
// 将日志类型赋值ctx.log,后期中间件特殊位置须要记录日志,可直接使用ctx.log.error(err)记录不一样类型日志
methods.forEach((method, i) => {
contextLogger[method] = (message) => {
logger[method](logInfo(ctx, message, commonInfo))
}
})
ctx.log = contextLogger;
// 执行中间件
await next()
// 结束时间
const responseTime = Date.now() - start;
// 将执行时间记录logger.info
logger.info(logInfo(ctx,
{
responseTime: `响应时间为${responseTime/1000}s`
}, commonInfo)
)
}
}
复制代码
import Log from '../log/logger';
...
app.use(Log({
env: app.env, // koa 提供的环境变量
projectName: 'back-API',
appLogLevel: 'debug',
dir: 'logs',
serverIp: ip.address()
}))
复制代码
ctx.log.error(err.stack); //记录错误日志
ctx.log.info(err.stack); // 记录信息日志
ctx.log.warn(err.stack); // 记录警告日志
复制代码
今天讲了日志中间件的 关键开发及具体调用,log4js使用基本配置和流程解析能够看前面log4js的文章。至此,完成一个简单的日志中间件。koa