はじめに
node.jsのコードの中でmorganモジュールを使用する機会があったので、どのようなモジュールであるのか簡単にまとめたいと思います。
morganモジュールとは
Node.jsアプリケーションで使用されるHTTPリクエスト(レスポンスではなく!)のロギングミドルウェアです。ExpressなどのWebフレームワークと組み合わせて使うことが一般的で、アプリケーションに送られてくるリクエスト情報(メソッド、ステータスコード、URL、レスポンスタイム(厳密にはリクエストに対するサーバーの応答時間を指すがこの情報も含む事ができる)など)を簡単にログとして記録することができます。
主な特徴
・HTTPリクエストのログ
サーバーに送られるすべてのHTTPリクエストをログに残します。リクエストの情報を記録することで、アプリケーションの動作確認やデバッグに役立ちます。
・プリセットのログフォーマット
Morganは、combined、common、dev、short、tinyといったプリセットフォーマットが用意されており、すぐに使用できます。
・カスタムフォーマット
必要に応じて、カスタムログフォーマットを設定することも可能です。
使用方法
基本的には、
morgan(format, options)
という形で記載します。
format
リクエストのログフォーマットを簡単に設定できるPredefined Formats(事前定義されたフォーマット)が用意されています。tiny、 devなどです。それぞれの特徴は、以下です。
tiny: 最もシンプルなフォーマット
HTTPメソッド、URL、HTTPステータスコード、レスポンスサイズ、レスポンスタイム
例:
dev: 開発中に使うためのフォーマットで、カラーリングされたシンプルなログ出力
HTTPメソッド、URL、HTTPステータスコード、レスポンスタイム、レスポンスサイズ
例:
options
オプションではstreamというものがあり、ログにストリームをアウトプットします。出力先はデフォルトでは、process.stdoutです。今回のサンプルコードの書き方がストリームとして本当に正しいのかは分かりませんが、動きはしました。
サンプルコード
const express = require('express');
const morgan = require('morgan');
const app = express();
const loggerStream = {
write: message => console.log(`From loggerStream: ${message}`),
};
app.use(morgan('tiny', { stream: loggerStream }));
app.get('/', (req, res) => {
res.status(200).send('Hello from the server side!');
});
app.listen(3000, () => {
console.log(`App running on port 3000...`);
});
コードの解説
const loggerStream = {
write: message => console.log(`From loggerStream: ${message}`),
};
writeメソッドを定義し、morganが生成するログを受け取って、カスタムメッセージを加えつつconsole.logで出力します。messageは、morganから渡されるログメッセージを表示します。
app.use(morgan('tiny', { stream: loggerStream }));
morganのログ出力先を標準出力ではなく、カスタムで定義したloggerStreamに変更します。
app.get('/', (req, res) => {
res.status(200).send('Hello from the server side!');
});
GETリクエストが/(ルートパス)に送られたときに実行される関数を定義しています。クライアントにステータスコード200で「Hello from the server side!」というメッセージをレスポンスとして送ります。この記述はmorganモジュールとは関係ありません。
app.listen(3000, () => {
console.log(`App running on port 3000...`);
});
サーバーをポート3000で起動し、アクセス可能な状態にします。ポート3000がサーバーの接続口です。コールバック関数でサーバーが起動したことを示すメッセージ「App running on port 3000…」がコンソールに出力されます。
実行結果
node morgan.jsを実行した際に、「App running on port 3000...」が出力されます。
その後、「http://127.0.0.1:3000/」にアクセス(リクエストを送る)した際に、「From loggerStream: GET / 200 27 - 2.455 ms」が表示されます。
まとめ
node.jsのmorganモジュールの使用方法についてまとめました。
Reference