美文网首页
关于NodeJs服务端请求错误日志的记录

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

作者: calvinxiao | 来源:发表于2015-08-30 00:40 被阅读0次

    目前的服务端错误处理

    服务端使用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

    相关文章

      网友评论

          本文标题:关于NodeJs服务端请求错误日志的记录

          本文链接:https://www.haomeiwen.com/subject/jdgkcttx.html