问题
日志是查找bug的重要线索,充分的日志信息可以快速定位问题,提高开发与项目维护效率,但目前的项目中有三种日志没有输出:
1、通过 sequelize-typescript 对mysql操作报错时,报错的sql语句没有输出。
2、没有捕获 Promise 的 报错,并对Promise的报错保存日志。
3、所有的接口调用没有输出入参与出参日志。
解决方案
1、通过调试可以看到 sequelize-typescript 的报错会将报错sql放入Error对象中,只要对其输出就可以了:
1
2
3
4
5
6
7
try{
await this.saveMyData();
}catch (e) {
if(e.sql){
LogManager.instance.onerror(`Error sql : ${e.sql}`)
}
}
2、没有对 Promise 的 rejection 进行处理就会抛出这个unhandledRejection事件,对其处理就可以了:
1
2
3
4
5
6
process.on('unhandledRejection',function(e){
LogManager.instance.onerror("unhandledRejection Error: " + (e.stack || e));
if(e.sql){
LogManager.instance.onerror("unhandledRejection Error sql :" + e.sql);
}
});
3、这个是最影响开发效率的,但由于用了protobuff,在现有设计上难以实现输入输出日志。
后面实现了,看这篇
node对ProtoBuf解析进行日志输出的实现