2016-10-06 1 views
0

Ich möchte Logger INFO-Nachrichten von meinem ganzen Code, aber nicht von 3rd-Party-Bibliotheken drucken. Dies wird an mehreren Stellen diskutiert, aber die vorgeschlagene Lösung funktioniert nicht für mich. Hier ist meine Simulation von externen Bibliothek, extlib.py:Logger, um keine INFO von externen Bibliotheken anzuzeigen

#!/usr/bin/env python3 
from logging import info 

def f(): 
    info("i am extlib f()") 

Mein Modul:

#!/usr/bin/env python3 
import logging 
from logging import info 
import extlib 

logging.basicConfig(level=logging.INFO) 
info("I am mymodule") 
extlib.f() 

Ausgang:

INFO: root: Ich bin mymodule

INFO: root: ich bin extlib f()

Mein Versuch INFO für lokale Modul nur zu aktivieren:

#!/usr/bin/env python3 
import logging 
from logging import info 
import extlib 

logging.getLogger(__name__).setLevel(logging.INFO) 
info("I am mymodule") 
extlib.f() 

Ausgang: nichts

Wunsch Ausgabe:

INFO: root: Ich mymodule bin

Was bin Ich mache falsch?

Antwort

2

Das Problem ist, dass sie nicht die Logger-Klasse in der externen Bibliothek verwenden. Wenn sie das wären, könntest du es herausfiltern. Ich bin nicht sicher, dass Sie sie davon abhalten können, Informationen aufzuzeichnen, da sie den Funktionsaufruf info verwenden. Hier ist ein Workaround.

Suppressing output of module calling outside library

Update:

hier, wie Sie Logger tun

import logging 

# create logger 
logger = logging.getLogger('simple_example') 
logger.setLevel(logging.DEBUG) 

# create console handler and set level to debug 
ch = logging.StreamHandler() 
ch.setLevel(logging.DEBUG) 

# create formatter 
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') 

# add formatter to ch 
ch.setFormatter(formatter) 

# add ch to logger 
logger.addHandler(ch) 

# 'application' code 
logger.debug('debug message') 
logger.info('info message') 
logger.warn('warn message') 
logger.error('error message') 
logger.critical('critical message') 
+0

1. Die Frage ist etwa libary anmelden, während Ihr Link verweist auf Ausgabeumleitung. 2. "Sie" benutzen die Logging-Bibliothek und in meinem Beispiel sind "sie" '' extlib.py'', die eindeutig die Logging-Bibliothek verwenden. – Muposat

+0

ja? Ich verstehe das? Sie verwenden Funktionen aus der Logger-Bibliothek, anstatt die Logger-Klasse aus der Logger-Bibliothek zu verwenden. Das ist das Problem .... – bravosierra99

+0

ein anderer Gedanke, haben Sie versucht, die Protokollierungsstufe zu ändern, bevor Sie ihren Code aufrufen? das könnte funktionieren. Habe jetzt keine Chance es zu testen. Sie können basicConfig nicht aufrufen, aber Sie können die Ebene direkt ändern – bravosierra99

Verwandte Themen