没有合适的资源?快使用搜索试试~ 我知道了~
主要给大家介绍了关于自定义Egg.js的请求级别日志的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
资源推荐
资源详情
资源评论
关于自定义关于自定义Egg.js的请求级别日志详解的请求级别日志详解
主要给大家介绍了关于自定义Egg.js的请求级别日志的相关资料,文中通过示例代码介绍的非常详细,对大家的
学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Egg.js 是什么是什么?
Egg.js 为企业级框架和应用而生,我们希望由 Egg.js 孕育出更多上层框架,帮助开发团队和开发人员降低开发和维护成本。
注:Egg.js 缩写为 Egg
背景背景
组织为了更好的对各个业务的请求日志进行统一的分析,制定了统一的日志打印规范,比如:
[time][processId][traceId][userid] Hello World....
统一格式之后,业务现有业务的日志工具打印出来的格式是无法满足该规范的,所以我们需要对此进行改造。
我们前端目前Node中间层使用的框架是Egg.js,所以下文讲述下如何在Egg.js上自定义请求日志格式。
开始动手开始动手
Egg.js中自带了三种logger,分别是
Context Logger
App Logger
Agent Logger
Context Logger主要是用来记录请求相关的日志。每行日志都会在开头自动的记录当前请求的一些信息,比如时间、ip、请求
url等等。
App Logger用于记录应用级别的日志,比如程序启动日志。
Agent Logger用于记录多进程模式运行下的日志。
我们想自定义请求级别的日志,那重点就要从Context Logger去研究怎么做。最理想的方案就是,Context Logger本身支持配
置化的自定义格式,通过在egg.js的config配置文件中,通过传入formatter的参数就能自定义。
//config.default.js
exports.customLogger = {
log: {
file: 'appname.log',
formatter: (message)=>{
return `${message.time}${message.processid}`
}
}
}
但不久我们发现这条路走不通,设置了这个formatter并不起作用。从Context Logger的源码中,我们发现的端倪
context_logger.js
[ 'error', 'warn', 'info', 'debug' ].forEach(level => {
const LEVEL = level.toUpperCase();
ContextLogger.prototype[level] = function() {
const meta = {
formatter: contextFormatter,
paddingMessage: this.paddingMessage,
};
this._logger.log(LEVEL, arguments, meta);
};
});
module.exports = ContextLogger;
function contextFormatter(meta) {
return meta.date + ' ' + meta.level + ' ' + meta.pid + ' ' + meta.paddingMessage + ' ' + meta.message;
}
在源码中我们可以看到,formatter参数已经被内部的一个自定义格式化函数覆盖了,配置中写的是不会启作用的。
此路不通,只能尝试自己实现logger去解决。自己实现我们需要考虑一些点,比如:
日志要写到文件中,错误日志单独写一个文件
需要能按天或按小时切割日志
资源评论
weixin_38729022
- 粉丝: 4
- 资源: 959
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功