如何为node-mongodb-native设置日志记录?

时间:2013-08-20 13:51:56

标签: node.js express node-mongodb-native

我正在尝试为节点设置本机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');
    });
});

1 个答案:

答案 0 :(得分:2)

下面复制的是:a copy of the answer to this question I posted on the node-mongodb-native google group

在查看最新版本的代码(提交0fd78b3278da8deac980cb876fcb2bf72eaafb79)之后,看起来还没有真正实现日志记录。

首先是一些基本规则:如果你创建一个服务器配置对象(http://mongodb.github.io/node-mongodb-native/api-generated/server.html?highlight=server#Server)并在那里设置logger对象就可以了。如果您创建一个Db()对象并在其选项中设置一个记录器,那么它将覆盖您设置其服务器配置的任何记录器。如果您创建一个MongoClient()对象,这相当于新的Db('test',serverOptions,options),因此您可以在serverOptions或options中设置您的logger对象。我不打算介绍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属性。我实际上没有测试过这个,因为我没有在这里正确的设置,但从查看代码,这似乎是这种情况。