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 group上发布的这个问题的答案的副本

查看最新版本的代码(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 中设置你的 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 属性。实际上,我没有对此进行测试,因为我在这里没有正确的设置,但是从查看代码来看,情况似乎就是这样。

于 2013-09-03T03:04:45.457 回答