web-dev-qa-db-ja.com

expressjsロギングのベストプラクティスは何ですか?

Expressjsに基づいてアプリケーションを構築していますが、すべてのイベントをログに記録したいと思います。ウィンストンを見つけることができました。とにかく、私はそれをexpressjsアプリに接続する方法を探しています。

また、アプリケーション内でログを記録することも必要です。私の要求はそれほど単純ではないので、アプリ内のすべて(要求だけでなく)をログに記録したいと思います。

私の現在の状況:

server.js(このレベルでhttpリクエストを記録したい)

var express = require('express');
var app = express();
var fs = require('fs');

// Post parser
app.configure(function(){
    app.use(express.bodyParser());
});

// Load routes
require('fs').readdirSync(__dirname + '/routes').forEach(function(file) {
    require(__dirname + '/routes/' + file)(app);
});

// 404: Not found
app.use(function(req, res, next){
    res.json(404, {ERROR: 'Page not found.'});
});

// 500: Error reporing
app.use(function(err, req, res, next){
    console.error(err.stack);
    res.json(500, {ERROR: 'Internal server error.'} );
});

// Startup new server
app.listen(900);

routes/something.js

var something = require(__dirname + '/../controller/something.js');

module.exports = function(app) {
    app.get('/v1/something', function(req, res, next) { new something().getAll(req, res, next); });
};

controller/something.js(デバッグログに同じロガーを使用したい)

/**
 * Constructor
 *
 */
function Something() {
};

/**
 * Get all the data
 *
 */
Something.prototype.getAll = function(req, res, next) {
    // I want to log some very important information here
    res.json({result: true, data: ['hello', 'hi', 'ciao', 'buf']});
}

module.exports = Something;

私が考えているもう1つのことは、コントローラ(モデルや他のライブラリなど)から呼び出される関数のすべてのイベントを記録することです。

だから私は、良い方法はいくつかのロガーライブラリを作成するかもしれないと思います。

var logger = require(__dirname + '/../libraries/logger.js');

ロガー定義を含む。解決方法がわからないもう1つの問題は、データにプレフィックスを付ける方法です。たくさんの同時リクエストがありますが、各リクエストによってどのデバッグメッセージが呼び出されたかを確認したいと思います。

50
Yarik Dot

winston を使用します。これはおそらく最も堅牢なロギングパッケージです。

最終的にあなたが提案したとおりに設定しました。定義とトランスポートの周りにロガーオブジェクトをラップするために使用される共通ライブラリを作成し、異なる方法で処理したい他のタイプのオブジェクトを処理します。

https://Gist.github.com/rtgibbons/7354879

27
Ryan Gibbons

エクスプレスを使用している場合は、 express-winston パッケージをご覧ください。その後、ウィンストンをミドルウェアとして使用し、コードを乱雑にすることなく、リクエスト/エラーを簡単に記録できます...

9
ciny

次のRailsスタイルのロギングが大好きです。

[2017-11-02T11:13:54.545 #07738a81] Started GET /api/url for 10.0.0.1
[2017-11-02T11:13:54.550 #07738a81] Completed 200 31739 in 5.635 ms

以下のコードはそれを行います

addRequestId = require('express-request-id')(setHeader: false)
app.use(addRequestId)

morgan = require('morgan')
morgan.token('id', (req) -> req.id.split('-')[0])

app.use(morgan(
  "[:date[iso] #:id] Started :method :url for :remote-addr",
  immediate: true))

app.use(morgan("
  [:date[iso] #:id] Completed :status :res[content-length] in :response-time ms"))

app.use('/api', router)
0
Hirurg103