Node.jsサーバーから送信された内部HTTP要求をログに記録するには、Proxy Node.jsサーバーを作成し、そこにすべての要求をMorganで記録することができます。
まず、3つの定数を定義(またはプロジェクト設定ファイルからの読み込み):ENABLE_LOGGER
がtrueの場合
// The real API endpoint, such as "another micro-service" in your network
const API = http://<real_server>
// Proxy Node.js server running on localhost
const LOGGER_ENDPOINT=http://localhost:3010
// Flag, decide whether logger is enabled.
const ENABLE_LOGGER=true
第二に、あなたのNode.jsサーバーを起動すると、同時にロガー・サーバを起動します。ロガーサーバーは、リクエストをログに記録し、request
モジュールを使用して実際のAPIサーバーに転送します。 Morganを使用して、より読みやすい形式を提供することができます。
const request = require('request');
const morgan = require('morgan')(':method :url :status Cookie: :req[Cookie] :res[content-length] - :response-time ms');
...
if (ENABLE_LOGGER && LOGGER_ENDPOINT) {
let loggerPort = 3010;
const logger = http.createServer((req, res) => {
morgan(req, res,() => {
req.pipe(request(API + req.url)).pipe(res);
});
});
logger.listen(loggerPort);
}
第三に、ENABLE_LOGGER
がtrueの場合、あなたのNode.jsサーバーで、ロガーサーバーへのAPIリクエストを送信し、ENABLE_LOGGER
がfalseの場合、実サーバに直接APIを送信します。
let app = express(); // assume Express is used, but this strategy can be easily applied to other Node.js web framework.
...
let API_Endpoint = ENABLE_LOGGER ? LOGGER_ENDPOINT : API;
app.set('API', API_Endpoint);
...
// When HTTP request is sent internally
request(app.get('API') + '/some-url')...
お返事ありがとうございます@shaochuancs。これはまさに私が必要なものです:) –