ログはアプリケーションの重要な部分であり、アプリケーションの動作に関する洞察を提供し、問題のデバッグに役立ち、パフォーマンスを監視します。 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 のインストール
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 リクエストのログを簡素化します。これらを組み合わせることで、アプリケーションの監視とデバッグの能力を強化する包括的なログ ソリューションが提供されます。
最終コードの概要
ファイルとその内容を簡単にまとめます:
以上がWinston と Morgan による高度な Node.js API ロギングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。