ログはアプリケーションの重要な部分であり、アプリケーションの動作に関する洞察を提供し、問題のデバッグに役立ち、パフォーマンスを監視します。 Node.js API では、Winston や Morgan などのライブラリを使用して高度なログを実現できます。この記事では、Node.js API での高度なログ記録のために Winston と Morgan を設定して使用する方法を説明します。
高度なログ記録が必要な理由
高度なログ記録はいくつかの理由から不可欠です:
デバッグとトラブルシューティング: ログにはアプリケーション イベントの詳細な履歴が記録され、問題を診断する際に非常に役立ちます。これらは、エラーの根本原因を特定し、問題に至る一連のアクションを理解するのに役立ちます。
監視とメンテナンス: ログを継続的に監視することで、開発者はアプリケーションの状態とパフォーマンスを追跡できます。ログを分析することで、異常、パフォーマンスのボトルネック、潜在的な問題を重大になる前に検出できます。
監査とコンプライアンス: 多くのアプリケーション、特に機密データを扱うアプリケーションでは、詳細なログを維持することがコンプライアンス要件です。ログには、ユーザーのアクションとシステムの変更の記録が提供されます。これは、監査や規制遵守にとって重要となる可能性があります。
セキュリティ: ログイン試行の失敗、不正アクセス、不審なアクティビティなどのセキュリティ関連イベントをログに記録することは、セキュリティの脅威を検出して対応するために非常に重要です。高度なロギングは、安全なアプリケーション環境を維持するのに役立ちます。
目次
1.ウィンストンとモーガンの紹介
Winston は、Node.js 用の多用途で使いやすいログ ライブラリです。ログ メッセージの複数のトランスポートをサポートしています。つまり、さまざまな形式とレベルでさまざまな場所 (コンソール、ファイル、リモート サーバーなど) にログを記録できます。
Morgan は、Node.js 用の HTTP リクエスト ロガー ミドルウェアです。これにより、事前定義された形式での HTTP リクエストのログ記録が簡素化され、API で受信リクエストとレスポンスを追跡するのに非常に役立ちます。
2.Node.js プロジェクトのセットアップ
まず、新しい Node.js プロジェクトを作成します (まだない場合):
mkdir node-api-logging cd node-api-logging npm init -y
3.ウィンストンとモーガンのインストール
Winston と Morgan を Express とともにインストールします (基本 API のセットアップ用):
npm install express winston morgan
4.高度なログ記録用に Winston を構成する
Winston を構成するための logger.js ファイルを作成します:
// logger.js const { createLogger, format, transports } = require('winston'); const { combine, timestamp, printf, errors } = format; const customFormat = printf(({ level, message, timestamp, stack }) => { return `${timestamp} ${level}: ${stack || message}`; }); const logger = createLogger({ level: 'info', format: combine( timestamp(), errors({ stack: true }), customFormat ), transports: [ new transports.Console(), new transports.File({ filename: 'logs/error.log', level: 'error' }), new transports.File({ filename: 'logs/combined.log' }) ] }); module.exports = logger;
5.HTTP リクエスト ロギングのための Morgan の統合
Morgan と Winston を統合するための middleware/logger.js ファイルを作成します:
// middleware/logger.js const morgan = require('morgan'); const logger = require('../logger'); const stream = { write: (message) => logger.info(message.trim()) }; const morganMiddleware = morgan('combined', { stream }); module.exports = morganMiddleware;
6.ウィンストンとモーガンの組み合わせ
Winston と Morgan の両方を Express アプリケーションに統合します:
// app.js const express = require('express'); const logger = require('./logger'); const morganMiddleware = require('./middleware/logger'); const app = express(); // Use Morgan middleware for HTTP request logging app.use(morganMiddleware); // Example route app.get('/', (req, res) => { logger.info('Hello world endpoint was called'); res.send('Hello, world!'); }); // Error handling middleware app.use((err, req, res, next) => { logger.error(err.message, { stack: err.stack }); res.status(500).send('Something went wrong!'); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { logger.info(`Server is running on port ${PORT}`); });
7.ログ形式のカスタマイズ
Winston と Morgan ではログ形式をカスタマイズできます。たとえば、ヘッダー、クエリ パラメーター、応答時間などの追加のリクエストの詳細をログに記録したい場合があります。
8.異なるトランスポートへのロギング
Winston はさまざまなトランスポートをサポートしています。メッセージの重大度に基づいて、異なる宛先にログを記録できます。たとえば、エラー ログをリモート ログ サーバー、または Loggly や Papertrail などのサードパーティ サービスに送信することができます。
9.エラー処理とログ
問題を特定して解決するには、適切なエラー処理とログ記録が不可欠です。エラー処理ミドルウェアが Winston.
10.結論
Winston と Morgan を組み合わせることで、Node.js API で高度なログ記録を実現できます。 Winston はアプリケーション レベルのイベントをログに記録するための堅牢なフレームワークを提供し、Morgan は HTTP リクエストのログを簡素化します。これらを組み合わせることで、アプリケーションの監視とデバッグの能力を強化する包括的なロギング ソリューションが提供されます。
最終コードの概要
ファイルとその内容を簡単にまとめます:
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3