2017-03-06 4 views
0

Ich möchte den Protokolllevel verschiedener Komponenten in der Datei mongodb.conf durch Ausführen eines .py-Skripts einstellen. Normalerweise verwende ich einfach grundlegende Befehle gegen die Datenbank wie update_one oder Einfügen ohne Probleme. Der Fehler Ich erhalte:PyMongo Loglevel einstellen

„Typeerror:‚Collection‘Objekt nicht aufrufbar ist, wenn Sie die‚setloglevel‘Methode auf einem‚Datenbank‘Objekt aufzurufen bedeuten, dass es fehlschlägt, weil kein solches Verfahren existiert

.. ich habe setLogLevel versucht, set_log_level und ein paar andere nicht in Ordnung etwas in pymongo Dokumentation oder Online-

Wie kann ich Protokollebene und ist es möglich, Vielen Dank im Voraus

Code:.

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() 
.?.

Antwort

0

"setLogLevel" ist eine in Javascript implementierte Mongo-Shell-Funktion. Sie können ohne Klammern, indem Sie den Namen in der Mongo Shell, die Durchführung aller Mongo Shell-Funktion finden Sie unter:

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

OK, also lassen Sie uns tiefer gehen und wirklich die Umsetzung sehen:

> 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; 
} 

wir jetzt Sehen Sie sich an, dass die Shell die "setParameter" -Funktion in der Admin-Datenbank ausführt. Siehe die setParameter docs:

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

Seit "setParameter" ein MongoDB Befehl ist, können wir es in PyMongo die gleiche Art und Weise ausführen können wir jeden MongoDB-Befehl mit PyMongo laufen:

from bson import SON 

from pymongo import MongoClient 

c = MongoClient() 

result = c.admin.command(SON([ 
    ("setParameter", 1), 
    ("logComponentVerbosity", { 
     "storage": { 
      "verbosity": 5, 
      "journal": { 
       "verbosity": 1 
      } 
     } 
    })])) 

print(result)