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では、通常、developmentのエラーをコンソールに記録します。
Model.findOne(options, function(err, doc) {
var output = {};
if (err) {
console.log("Error retrieving doc: " + err);
}
しかし、私のproductionサーバーでは、アプリがうまくいかないときに役立つログファイルが必要です。
何か案は?
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: {}
});
});
しかし、どうすればプロダクションのものをオンにできますか?必要なモノログと同じですか?
winston は、ロギング用の一般的なライブラリです。
すべてのログを1つのファイルに転送することも、エラー、デバッグ、および情報ログ用に異なるファイルを保持することもできます。
例:
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 dailyrotate file with winstonを使用して、サイズまたは日付に基づいてログファイルをローテーションすることもできます。
PM2はプロセスマネージャであるため、無関係に感じるかもしれませんが、PM2もエラーログを処理するのに最適であることがわかりました。