我想通过运行.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()
答案 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;
}