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

Posted

技术标签:

【中文标题】NodeJS ExpressJS - 如何记录生产服务器的错误?【英文标题】:NodeJS ExpressJS - how to log errors for the production server? 【发布时间】:2017-08-20 14:54:03 【问题描述】:

如何将 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: 
    );
);

但是我如何打开制作的?和我需要的独白一样吗?

【问题讨论】:

应该像将错误输出到文件而不是控制台一样简单,以便您可以引用此文件。 ***.com/questions/8393636/… 【参考方案1】:

您可以添加像morgan 这样的日志库,或者如果您的节点应用程序在进程管理器(如 pm2)下运行,那么 pm2 将为您跟踪日志记录。我没有大量使用过 pm2,但据我了解,您可以让您的 console.log 语句保持不变,并且 pm2 会将您应用程序的所有输出保存到您的日志文件中。您可以阅读更多关于 pm2 的日志记录功能here。

【讨论】:

我用 PM2.但我更喜欢有一个像 monolog 这样的记录器,我可以在我的代码中手动管理它。【参考方案2】:

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 一起使用,以根据大小或日期轮换您的日志文件。

【讨论】:

【参考方案3】:

您可能觉得无关紧要,因为 PM2 是流程管理器,但我发现 PM2 也是处理错误日志的最佳选择。

【讨论】:

以上是关于NodeJS ExpressJS - 如何记录生产服务器的错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何诊断/调试 nodejs/expressjs 的 500 内部服务器错误?

通过 NodeJS 获取 JSON 数据时,如何通过 ExpressJS 更新我的 EJS 模板?

刷新页面显示找不到文件错误如何使用 [angular js + NodeJS/ExpressJS] 解决

如何使用 nodejs 模块 http2 将 http2 与 ExpressJS 集成?

我们如何使用带有 expressjs-nodejs 的 mongoose 对 mongodb 中的 ObjectId 列执行排序?

用于生产的 Nodejs 网络服务器