PyMongo设置日志级别

时间:2017-03-06 18:19:48

标签: mongodb pymongo

我想通过运行.py脚本来设置mongodb.conf文件中各种组件的日志级别。我通常只使用基本命令,像update_one这样的数据库或插入没有问题。我得到的错误:

“TypeError:'Collection'对象不可调用。如果你想在'Database'对象上调用'setloglevel'方法,它就会失败,因为不存在这样的方法。

我尝试过setLogLevel; set_log_level和其他几个。不能在pymongo文档或在线中做任何事情。

如何设置日志级别,是否可能?提前致谢。

代码:

def setlvl():

## Connection to the Mongo Service ##

  try:
      conn=pymongo.MongoClient("myip_address")
      print("Connected successfully!!!")
  except pymongo.errors.ConnectionFailure:
     print("Could not connect to MongoDB: %s" % e )

  print("Connection:",conn)

## Connect to the DataBase ##

  db = conn.mydatabase
  print("database:", db)      

## Update log level ##

  loglvl = db.setloglevel
  result=loglvl(5, "storage")

setlvl()

1 个答案:

答案 0 :(得分:2)

" setLogLevel"是一个用Javascript实现的mongo shell函数。您可以通过在mongo shell中键入其名称来查看任何mongo shell函数的实现,而不使用括号:

SELECT

好的,让我们深入了解并真正看到实施:

> db.setLogLevel
function (logLevel, component) {
    return this.getMongo().setLogLevel(logLevel, component);
}

现在我们看到shell运行" setParameter"管理数据库上的函数。请参阅setParameter docs:

https://docs.mongodb.com/manual/reference/command/setParameter/

自" setParameter"是一个MongoDB命令,我们可以在PyMongo中运行它,就像我们用PyMongo运行任何MongoDB命令一样:

> db.getMongo().setLogLevel
function (logLevel, component) {
    componentNames = [];
    if (typeof component === "string") {
        componentNames = component.split(".");
    } else if (component !== undefined) {
        throw Error("setLogLevel component must be a string:" + tojson(component));
    }
    var vDoc = {verbosity: logLevel};

    // nest vDoc
    for (var key, obj; componentNames.length > 0;) {
        obj = {};
        key = componentNames.pop();
        obj[key] = vDoc;
        vDoc = obj;
    }
    var res = this.adminCommand({setParameter: 1, logComponentVerbosity: vDoc});
    if (!res.ok)
        throw _getErrorWithCode(res, "setLogLevel failed:" + tojson(res));
    return res;
}