1

ノードのネイティブ mongo ドライバーのログを設定しようとしています。私がやろうとしていることのデモンストレーションとして、次のスニペットをセットアップしました。残念ながら、コンソールには何も出力されていません。何か案は?

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

var mongod = require('mongodb');

var server_conf = new mongod.Server('localhost', 27017, {auto_reconnect:true});

//dummy logger
var logger =  {
    error:function(message, object) {console.log('anything')},
    log:function(message, object) {console.log('anything')},
    debug:function(message, object) {console.log('anything')}}


var db_container = {db: new mongod.Db('test', server_conf,
    {w:1,journal:true, native_parser:true, logger: logger})}

app.use(express.bodyParser());
app.use(app.router);

db_container.db.open(function(err, index_info){

    if(err) throw err;
    var testcol = db_container.db.collection('testcol');

    app.get('/', function(request, res){

        testcol.insert({hello:"moto"}, function(err,doc){

            if(err){
                throw err;
            }
            testcol.find({}).toArray(function(err,docs){
                res.send(docs);
            });
        });

    });

    http.createServer(app).listen(3000, function () {
        console.log('Express server listening on port ' + '3000');
    });
});
4

1 に答える 1

2

以下に複製します: node-mongodb-native Google グループに投稿したこの質問への回答のコピー

コードの最新バージョン (commit 0fd78b3278da8deac980cb876fcb2bf72eaafb79) を見ると、ロギングがまだ実際には実装されていないように見えます。

最初のいくつかの基本ルール: サーバー構成オブジェクト ( http://mongodb.github.io/node-mongodb-native/api-generated/server.html?highlight=server#Server ) を作成し、そこにロガー オブジェクトを設定すると、わかった。Db() オブジェクトを作成し、そのオプションでロガーを設定すると、サーバー構成を設定したロガーが上書きされます。MongoClient() オブジェクトを作成する場合、これは new Db('test', serverOptions, options) と同等であるため、ロガー オブジェクトを serverOptions または options のいずれかに設定できます。MongoClient.Connect とそこで何が起こるかについては説明しません。コードのその部分を調べようとは思わないからです。

ロギングを機能させるには、実際にいくつかの追加のプロパティが必要であることが明らかになった connection.js で発生している logger オブジェクトの使用を見つけることができました。つまり、69行目

if(this.logger != null && this.logger.doDebug){
      this.logger.debug("opened connection", this.socketOptions);
} 

または307行目

if(self.logger != null && self.logger.doError) self.logger.error("parseError", errorObject);

connection.js にはさらに多くの doDebug/doError プロパティ ルックアップがあり、ログを機能させる必要があります。見た目からはごくわずかな量のロギングが行われていますが、有効にしたい場合は、ロガーにも doError/doLog/doDebug プロパティを設定する必要があります。ここには適切なセットアップがないため、実際にはこれをテストしていませんが、コードを調べると、これが当てはまるようです。

于 2013-09-03T03:04:45.457 に答える