logging français - Obtenir la sortie du module de journalisation dans IPython Notebook




jupyter tutorial (5)

Lorsque j'exécute le suivant dans IPython Notebook, je ne vois aucune sortie:

import logging
logging.basicConfig(level=logging.DEBUG)
logging.debug("test")

Quelqu'un sait comment faire pour que je puisse voir le message "test" dans le cahier?


Answers

Vous pouvez configurer la journalisation en exécutant %config Application.log_level="INFO"

Pour plus d'informations, voir Options du noyau IPython


Si vous voulez toujours utiliser basicConfig , rechargez le module de journalisation comme ceci

import logging
reload(logging)
logging.basicConfig(format='%(asctime)s %(levelname)s:%(message)s', level=logging.DEBUG, datefmt='%I:%M:%S')

Ma compréhension est que la session IPython démarre la journalisation de sorte que basicConfig ne fonctionne pas. Voici la configuration qui fonctionne pour moi (je souhaite que ce n'était pas si grossier puisque je veux l'utiliser pour presque tous mes cahiers):

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)

Maintenant, quand je cours:

logging.error('hello!')
logging.debug('This is a debug message')
logging.info('this is an info message')
logging.warning('tbllalfhldfhd, warning.')

Je reçois un fichier "mylog.log" dans le même répertoire que mon notebook qui contient:

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.

Notez que si vous réexécutez ceci sans redémarrer la session IPython, il écrira des entrées en double dans le fichier car il y aurait maintenant deux gestionnaires de fichiers définis


Essayez de suivre:

import logging
logger = logging.getLogger()
logger.setLevel(logging.DEBUG)
logging.debug("test")

D'après logging.basicConfig :

Effectue la configuration de base pour le système de journalisation en créant un StreamHandler avec un Formatter par défaut et en l'ajoutant à l'enregistreur racine. Les fonctions debug (), info (), warning (), error () et critical () appellent basicConfig () automatiquement si aucun gestionnaire n'est défini pour l'enregistreur racine.

Cette fonction ne fait rien si l'enregistreur racine a déjà des gestionnaires configurés pour cela.

Il semble que ipython notebook appelle basicConfig (ou set handler) quelque part.


C'est exactement ce dont j'avais besoin pour ma configuration de site MVC!

J'ai ajouté une petite modification à la méthode OnException pour gérer plusieurs instances de HandleErrorAttribute , comme suggéré par Atif Aziz:

Gardez à l'esprit que vous devrez peut-être prendre soin que si plusieurs instances HandleErrorAttribute sont en vigueur, la journalisation en double ne se produira pas.

Je vérifie simplement context.ExceptionHandled avant d'appeler la classe de base, juste pour savoir si quelqu'un d'autre a manipulé l'exception avant le gestionnaire courant.
Cela fonctionne pour moi et je poste le code au cas où quelqu'un d'autre aurait besoin de lui et de demander si quelqu'un sait si j'ai oublié quelque chose.

J'espère que c'est utile:

public override void OnException(ExceptionContext context)
{
    bool exceptionHandledByPreviousHandler = context.ExceptionHandled;

    base.OnException(context);

    Exception e = context.Exception;
    if (exceptionHandledByPreviousHandler
        || !context.ExceptionHandled  // if unhandled, will be logged anyhow
        || RaiseErrorSignal(e)        // prefer signaling, if possible
        || IsFiltered(context))       // filtered?
        return;

    LogException(e);
}




python logging ipython-notebook