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 列执行排序?