wake-up-neo.com

Holen Sie sich die Ausgabe aus dem Protokollierungsmodul in IPython Notebook

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?

95
Kyle Brandt

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.

87
falsetru

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')
53
Marigold

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

22
skulz00

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!')
8
Ataxias

Sie können die Protokollierung konfigurieren, indem Sie %config Application.log_level="INFO" ausführen.

Weitere Informationen finden Sie unter IPython-Kerneloptionen

7
Garvey

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.

1
mcsim

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")
0
Brig