Wenn ich das folgende in IPython Notebook ausführte, sehe ich keine Ausgabe:
import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")
Weiß jemand, wie man es macht, damit ich die "Test" -Meldung im Notebook sehen kann?
Versuchen Sie folgendes:
import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")
Gemäß logging.basicConfig :
Führt die Grundkonfiguration für das Protokollierungssystem durch, indem ein .__ erstellt wird. StreamHandler mit einem Standard-Formatter und Hinzufügen zum Stamm Logger Die Funktionen debug (), info (), warning (), error () und critical () ruft basicConfig () automatisch auf, wenn keine Handler .__ sind. für den Root-Logger definiert.
Diese Funktion führt nichts aus, wenn der Root-Logger bereits über Handler verfügt dafür konfiguriert.
Es scheint, als würde ipython notebook irgendwo basicConfig (oder set handler) aufrufen.
Wenn Sie weiterhin basicConfig
verwenden möchten, laden Sie das Protokollierungsmodul erneut
import logging
reload(logging)
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')
Ich verstehe, dass die IPython-Sitzung mit der Protokollierung beginnt, sodass basicConfig nicht funktioniert. Hier ist das Setup, das für mich funktioniert (ich wünschte, dies wäre nicht so grob aussehend, da ich es für fast alle meine Notebooks verwenden möchte):
import logging
logger = logging.getLogger()
fhandler = logging.FileHandler(filename='mylog.log', mode='a')
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
fhandler.setFormatter(formatter)
logger.addHandler(fhandler)
logger.setLevel(logging.DEBUG)
Wenn ich jetzt renne:
logging.error('hello!')
logging.debug('This is a debug message')
logging.info('this is an info message')
logging.warning('tbllalfhldfhd, warning.')
Ich bekomme eine "mylog.log" -Datei in demselben Verzeichnis wie mein Notizbuch, das Folgendes enthält:
2015-01-28 09:49:25,026 - root - ERROR - hello!
2015-01-28 09:49:25,028 - root - DEBUG - This is a debug message
2015-01-28 09:49:25,029 - root - INFO - this is an info message
2015-01-28 09:49:25,032 - root - WARNING - tbllalfhldfhd, warning.
Wenn Sie dies erneut ausführen, ohne die IPython-Sitzung neu zu starten, werden doppelte Einträge in die Datei geschrieben, da jetzt zwei Dateihandler definiert sind
Denken Sie daran, dass stderr der Standardstream für das Modul logging
ist. In IPython- und Jupyter-Notebooks sehen Sie möglicherweise nichts, wenn Sie den Stream nicht auf stdout konfigurieren:
import logging
import sys
logging.basicConfig(format='%(asctime)s | %(levelname)s : %(message)s',
level=logging.INFO, stream=sys.stdout)
logging.info('Hello world!')
Sie können die Protokollierung konfigurieren, indem Sie %config Application.log_level="INFO"
ausführen.
Weitere Informationen finden Sie unter IPython-Kerneloptionen
Was für mich jetzt funktioniert hat (Jupyter, Notebook-Server ist: 5.4.1, IPython 7.0.1)
import logging
logging.basicConfig()
logger = logging.getLogger('Something')
logger.setLevel(logging.DEBUG)
Jetzt kann ich Logger verwenden, um Informationen zu drucken, ansonsten würde ich nur eine Nachricht von der Standardebene (logging.WARNING
) oder darüber sehen.
Ich habe einen Logger für beide Dateien eingerichtet und wollte, dass er auf dem Notebook angezeigt wird. Das Hinzufügen eines Filehandlers löscht den Standard-Stream-Handler.
logger = logging.getLogger()
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
# Setup file handler
fhandler = logging.FileHandler('my.log')
fhandler.setLevel(logging.DEBUG)
fhandler.setFormatter(formatter)
# Configure stream handler for the cells
chandler = logging.StreamHandler()
chandler.setLevel(logging.DEBUG)
chandler.setFormatter(formatter)
# Add both handlers
logger.addHandler(fhandler)
logger.addHandler(chandler)
logger.setLevel(logging.DEBUG)
# Show the handlers
logger.handlers
# Log Something
logger.info("Test info")
logger.debug("Test debug")
logger.error("Test error")