关于NodeJs服务端请求错误日志的记录

目前的服务端错误处理

服务端使用NodeJs的restify作为app的rest服务接口,用restify的好处是没有太多框架的东西,能更好的控制服务端的代码逻辑。

关于错误日志记录,目前是使用在route的handler里面使用try catch,如果不这样做的话服务端的错误就会暴露给客户端,从安全和体验的角度上看都是不友好的。不没有捕获的错误restify是会这样处理的:

res.send(err); //在中间件中调用next(err)是一样的效果

目前项目使用log4j记录日志,一般用法是:

var logger = getLogger('requestUrl')
logger.warn(err.stack);

除了出错信息,还带上了初始化logger时的信息requestUrl,当然信息可以自定义,例如来自某某操作的日志

不足之处

  1. 代码冗余(业务分散),例如每个handler里面都要require logger,都要实行try catch机制。
  2. 日志信息不全,缺少请求对象的详细信息

更好的错误日志处理方案

先看看restify的文档

http://mcavage.me/node-restify/#server-api-2

文档中给出了各种事件,下面代码就用uncaughtException为例子说明如何更好的处理错误, 例子吧当前请求的路径和错误都打印出来,还可以吧请求对象保存起来,放在MongoDB里面瞬间查找高大上了有没有。。。

server.on('uncaughtException', function (req, res, route, err) {
    console.log(route);     // log the route, woo...
    console.log(err.stack); // log the error
    var message = 'WTF';
    if (err instanceof MyError) {
        message = err.message; // custom output message, cool
    }
    res.send(400, { message: message }); // status code can depend on the Error Type
});

完整代码请参考
https://gist.github.com/calvinxiao/ada4a6f4314acd984246

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,609评论 25 709
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,461评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,954评论 18 399
  • 当我们谈论爱情,在秋天,在最后,免不了伤悲。 生活好像用泪水堆积而成,用酒水搭建而成,我会记得为了某个人迷醉在某个...
    云霄上的蓝枫子阅读 3,169评论 0 4
  • 今天一个同学买了肖秀荣最后四套题(考研政治题)。 我看到后说这么早就有买了啊。 同学笑的很诡异的对我说:对啊,学校...
    蝟实阅读 12,739评论 4 6