4

へのすべてのリクエストをログに記録したいMongoDB。各ドキュメントには、HTTP メソッド、リクエストを行った人物、更新/挿入/取得されたドキュメントの _id、およびリクエストが行われた時刻が含まれている必要があります。誰か助けてくれませんか?

4

1 に答える 1

7

パッケージexpress-winstonの使用をお勧めします。ドキュメントについては、リンクを参照してください。パッケージをインストールした後、npm i express-winston で、ミドルウェア名 logger.js (または任意の名前) を作成します。以下のコードを下にコピーします

const expressWinston = require('express-winston');

const requestLog = expressWinston.logger({
  transports: [
    new winston.transports.Console({
      format: winston.format.json({
        space: 2
      })
    }),
    new winston.transports.MongoDB({
      db: 'localhost:27001', //Your Db connection
      options: {
        useNewUrlParser: true,
        poolSize: 2,
        autoReconnect: true
      }
    })
  ],
  meta: true,
  msg: "Request: HTTP {{req.method}} {{req.url}}; Username: {{req.user.preferred_username}}; ipAddress {{req.connection.remoteAddress}}",
  requestWhitelist: [
    "url",
    "method",
    "httpVersion",
    "originalUrl",
    "query",
    "body"
  ]
});

exports.requestLog = requestLog;

app.js ファイルでは、グローバルに適用されるようにロガー ファイルが必要です。

const logger = require('../middleware/logger');
const express = require('express');
const app = express();

app.use(logger.requestLog);

次のような追加オプションを含めることができます: expressWinston.responseWhitelist.push('body')

オブジェクトでレスポンスボディを提供します。

すべてのリクエストを表示したくない場合は、コンソールのトランスポートを削除できます。毎回データベースにアクセスせずにオブジェクトを表示できるように、追加しただけです。

于 2019-02-19T14:04:36.523 に答える