web-dev-qa-db-ja.com

node.js(エクスプレスフレームワーク)の組み込みアクセスログ

node.js(またはexpress framework)に、たとえばgrailsのような組み込みのアクセスログがあるかどうか疑問に思っていましたか?

Tomcatで実行されるgrailsアプリケーションがあり、これは/Apache-Tomcat-7.0.42/logs/localhost_access_log.2013.10.30.txtファイルを自動的に生成します。このファイルには、次のような要求応答に関するログが含まれています。

[30/Oct/2013:00:00:01 +0000] [my-ip-address] [http-bio-8080-exec-18] "GET /my-service/check HTTP/1.0" [200] [took: 1 milis]  

このログはシステムによって自動的に書き込まれるので、心配する必要はありません。

ではnode.jsはどうでしょうか?

助けてくれてありがとう!

イワン

14
Ivan Longin

editエクスプレス_4.0.0_以降、このソリューションでは明らかに不十分です。更新されたソリューションについては、whirlwinからの回答を確認してください。

app.use(express.logger());を使用できます

ここに記載: http://www.senchalabs.org/connect/logger.html

8

Expressの新しいバージョンでは(4.0.0執筆時点)、ロガーはExpressの一部ではなくなったため、次のように含める必要があります。依存関係を手動で。現在は morgan と呼ばれています。

したがって、package.json、依存関係としてmorganを追加します。

"dependencies": {
  ...
  "morgan": "*"
  ...
}

そして、あなたのExpress設定に、以下を追加します:

app.use(require('morgan')('dev'));

これで、ロギングは以前とほぼ同じように機能するはずです。 :-)

26
whirlwin

現在、ほとんどのミドルウェア(ロガーなど)はExpressにバンドルされておらず、個別にインストールする必要があります。

短い答え:まず、morganをインストールします。

npm install morgan

次に、それをロギングに使用します。

app = express();
var morgan  = require('morgan')
...
app.use(morgan('combined'))

ドキュメントはここです。

10
user508434

組み込みではありませんが、設定は非常に簡単です。 express-winston を使用して、Expressミドルウェアスタックに追加できます。 morganリクエストボディをログに記録させません ですが、expressWinstonは行います:

expressWinston.requestWhitelist.Push('body');
expressWinston.responseWhitelist.Push('body');

Coffeescriptの例:

expressWinston.requestWhitelist.Push('body')
expressWinston.responseWhitelist.Push('body')
app.use(expressWinston.logger({
      transports: [
        new winston.transports.Console({
          json: true,
          colorize: true
        })
      ],
      meta: true, // optional: control whether you want to log the meta data about the request (default to true)
      msg: "HTTP {{req.method}} {{req.url}}", // optional: customize the default logging message. E.g. "{{res.statusCode}} {{req.method}} {{res.responseTime}}ms {{req.url}}"
      expressFormat: true, // Use the default Express/morgan request formatting, with the same colors. Enabling this will override any msg and colorStatus if true. Will only output colors on transports with colorize set to true
      colorStatus: true, // Color the status code, using the Express/morgan color palette (default green, 3XX cyan, 4XX yellow, 5XX red). Will not be recognized if expressFormat is true
      ignoreRoute: function (req, res) { return false; } // optional: allows to skip some log messages based on request and/or response
    }));
2
Manuel Darveau