2014-02-21 18 views
11

Meine Protokollierungseinstellung aussehen wiePython: wie Protokollierungsanweisungen von Bibliotheken von Drittanbietern zu unterdrücken?

import requests 
import logging 

logging.basicConfig(level=logging.INFO) 
logger = logging.getLogger('BBProposalGenerator') 

Als ich das laufen, bekomme ich Protokolle als

INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost 
INFO:BBProposalGenerator:created proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac 
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost 
INFO:BBProposalGenerator:added offer with cubeValueId: f23f801f-7066-49a2-9f1b-1f8c64576a03 
INFO:requests.packages.urllib3.connectionpool:Starting new HTTP connection (1): localhost 
INFO:BBProposalGenerator:evaluated proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac 

Wie kann ich die Log-Anweisungen aus requests Paket unterdrücken? so dass ich Protokolle von meinem Code sehen nur

INFO:BBProposalGenerator:created proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac 
INFO:BBProposalGenerator:added offer with cubeValueId: f23f801f-7066-49a2-9f1b-1f8c64576a03 
INFO:BBProposalGenerator:evaluated proposal: 763099d5-3c8a-47bc-8be8-b71a593c36ac 

Dank

+0

'logging.getLogger ('Anfragen'). SetLevel (logging.ERROR)'? – jfs

+2

bekam ich die Antwort von https://stackoverflow.com/questions/11029717/how-do-i-disable-log-messages-from-the-requests-library – daydreamer

Antwort

1

, was Sie tun möchten, ist ein Filter, um alle der Logger anwenden, damit Sie steuern können, was ausgestrahlt wird. Die einzige Möglichkeit, den Filter auf alle Logger anzuwenden, besteht darin, die Logger-Logger-Klasse mit etwas zu initialisieren, das von logging.Logger abgeleitet ist und den Filter dort anwendet. Wie so:

class MyFilter(logging.Filter): 
def filter(self, record): 
    if record.name != 'BBProposalGenerator': 
     return False 
    return True 

class MyLogger(logging.Logger): 
def __init__(self, name): 
    logging.Logger.__init__(self, name) 
    self.addFilter(MyFilter()) 

Und dann alles, was Sie tun müssen, ist, die, bevor Logger instanziiert die Standard-Logger-Klasse als abgeleitete Klasse festgelegt sind, wie so:

logging.setLoggerClass(MyLogger) 
logging.basicConfig(level=logging.INFO) 

hoffe, das hilft!

+0

Das ist nicht notwendig - siehe meine Antwort. –

7

Sie genannt basicConfig() mit einem Pegel von logging.INFO, die die effektiven Ebene INFO für den Root-Logger setzt und alle Nachkommen Loggern, die nicht explizit festgelegt Ebene haben. Dazu gehören die requests Logger und erklärt, warum Sie diese Ergebnisse erhalten.

Stattdessen können Sie

logging.basicConfig() 

tun, die den Pegel auf den Standardwert WARNING verlassen wird, aber einen Handler hinzufügen, die Log-Meldungen an die Konsole ausgibt. Dann stellen Sie den Pegel auf dem Logger INFO:

logger = logging.getLogger('BBProposalGenerator') 
logger.setLevel(logging.INFO) 

Nun INFO und höhere Schwere Ereignisse protokolliert BBProposalGenerator oder einen seiner Nachkommen Logger wird gedruckt, aber die Wurzel-Logger (und andere Abkömmlinge davon, wie als requests.XXX) bleibt auf WARNING level und nur WARNING oder höhere Nachrichten anzeigen.

Natürlich können Sie eine höhere Ebene in dem basicConfig() Anruf angeben - wenn Sie ERROR angegeben, zum Beispiel nur ERROR oder höher von allen anderen Loggern sehen würde, aber INFO oder höher von BBProposalGenerator und seinen Nachkommen.

Verwandte Themen