NodeJS ExpressJS - 如何记录生产服务器的错误?

时间:2017-03-27 18:47:44

标签: node.js express error-log

如何将ExpressJS应用中的任何错误记录到文件中?

我知道我可以使用monolog轻松记录Slim框架:

$app->get('/tickets', function (Request $request, Response $response) {
    $this->logger->addInfo("Something interesting happened");

    $mapper = new Simon\TicketMapper($this->db);
    $tickets = $mapper->getTickets();

    $response->getBody()->write(var_export($tickets, true));
    return $response;
});

在Express中,我通常会将错误记录到控制台以进行开发

Model.findOne(options, function(err, doc) {

    var output = {};
    if (err) {
        console.log("Error retrieving doc: " + err);
    }

但是在我的生产服务器中,当应用出错时,我确实需要一个有用的日志文件。

有什么想法吗?

在Express的app.js中,它有:

// development error handler
// will print stacktrace
if (app.get('env') === 'development') {

  app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: err
    });
  });

}

// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
    res.status(err.status || 500);
    res.render('error', {
        message: err.message,
        error: {}
    });
});

但是我如何开启生产呢?它与我需要的独白相同吗?

3 个答案:

答案 0 :(得分:6)

winston是一个很受欢迎的日志记录库。

您可以将所有日志传输到一个文件,也可以为错误,调试和信息日志保留不同的文件。

示例:

  var winston = require('winston');

  var logger = new winston.Logger({
    level: 'error',
    transports: [
      new (winston.transports.File)({ filename: 'error.log' })
    ]
  });

在代码中:

logger.log('error', 'test error message %s', 'my string');

您还可以使用winston daily rotate file与winston根据大小或日期轮换日志文件。

答案 1 :(得分:2)

您可以添加morgan之类的日志记录库,或者如果您的节点应用程序在流程管理器下运行,如pm2,那么pm2将跟踪您的日志记录。我没有使用pm2,但据我所知,你可以保持console.log语句相同,pm2会将你应用程序的所有输出保存到日志文件中。您可以阅读有关pm2的日志记录功能here的更多信息。

答案 2 :(得分:0)

  

您可能会觉得无关紧要,因为 PM2 是流程经理,但我发现    PM2 也最好处理错误日志。