75

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);

ルート/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 つの問題は、データにプレフィックスを付ける方法です。ご存知のように、私は多くの同時リクエストを抱えており、各リクエストによってどのデバッグ メッセージが呼び出されたかを確認したいと考えています。

4

4 に答える 4

44

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

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

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

于 2013-11-07T13:54:12.020 に答える
14

Express を使用している場合は、express-winstonパッケージを参照してください。次に、winston をミドルウェアとして使用し、コードを乱雑にすることなく、要求/エラーを簡単にログに記録できます...

于 2013-11-07T12:35:56.923 に答える
1

Hirung103の回答が大好きなので、これがjavascriptバージョンです:

最初に、express-request-idmorganを追加します (これらのライブラリが にリストされていない場合) package.json

次に、次の行を 内に追加しますserver.js

...
const addRequestId = require('express-request-id')({
  setHeader: false
})

app.use(addRequestId)

const 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
    }
  )
)
...

Hirung103に感謝

于 2021-09-05T04:25:02.070 に答える