2016-05-22 5 views
6

私はノードのmongoアプリを持っています。今私は、アプリケーションで起こっているいくつかの特定の重要なイベントの監査証跡を表示したいと思います。MongoDB Node AppですべてのCRUD操作を監査してログに記録するにはどうすればよいですか?

この問題を解決するにはどうすればよいでしょうか?

私は、操作を記録するためにノードアプリケーションの各メソッドで呼び出される新しいコレクションとサービスを作成することを検討しました。

答えて

0

特定のアクションのために保存するすべてのログを持つ別のスキーマを使用することをお勧めします。

// schema 
var schema = new Schema({ 
    actionType: {type: String, require: true}, 
    userId: { type: Schema.Types.ObjectId, required: true }, 
    userType: { type: String, required: true }, 
    message: { type: String, required: true }, 
    createdAt: { type: Date, default: Date.now }, 

}, options); 

ここでは、撮影されているどのようなアクション

であなたのアクティビティログを記録することができます。 どのユーザー。 そのアクションで保存したいメッセージ。

2

あなたは「トリガー」について話しています。しかし残念なことに「MongoDBはトリガーをサポートしていません」

問題を解決するには、別のコレクションを作成し、そのコレクションにログ情報を保存するだけです。あなたには、いくつかのユニークなID(おそらくuuid)でそれぞれの要求にbunyan子ロガーを追加し、あなたのアプリにミドルウェアを追加することができます

1

リファレンス

ここでは、一意のIDを持つ各要求にロガーを添付するサンプルコードを示します。 あなたがこのロガーを使用して何かを印刷しますたびに、このID

var bunyan = require('bunyan'); 
var uuid = require('uuid'); 
var logger = bunyan.createLogger({name: 'some name'}); 
function loadlogger(req, res, next) { 
    req.log = logger.child({request_id: uuid.v4()}); 
    next() 
} 
app.use(loadLogger); 

を使用して各要求をトレースすることができますので、このUUIDも自動的に印刷され、あなたが従う

req.log.info({keys: values}, "message"); 
req.log.warn({keys: values}, "message"); 
req.log.error({keys: values}, "message"); 

ようほしいと思うときにログインすることができますあなたは完全なドキュメントを参照することができますbunyan logger

1

あなたはmongooseモジュールを使用している場合、すべてのクエリを記録する方法があります。コンソール上のすべてのクエリを記録します。あなたがファイルにログインする場合

mongoose.set('debug', true); 

は、この方法

mongoose.set('debug', function (coll, method, query, doc [, options]) { 
//do your thing 
}); 
のためのコールバックを使用します
関連する問題