J'essaie d'utiliser la bibliothèque standard pour déboguer mon code:
Cela fonctionne bien:
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
logger.info('message')
Je ne peux pas faire fonctionner l'enregistreur pour les niveaux inférieurs:
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.info('message')
logging.basicConfig(level=logging.DEBUG)
logger = logging.getLogger(__name__)
logger.debug('message')
Je ne reçois aucune réponse pour ni l'un ni l'autre.
Qu'est-ce que Python? Cela a fonctionné pour moi dans la version 3.4. Notez cependant que basicConfig () n'affectera pas le gestionnaire racine s'il est déjà configuré:
Cette fonction ne fait rien si le logger racine a déjà des gestionnaires configurés pour elle.
Pour définir explicitement le niveau sur la racine, faites logging.getLogger().setLevel(logging.DEBUG)
. Mais assurez-vous que vous avez déjà appelé basicConfig()
afin que le consignateur racine ait initialement une configuration. C'est à dire.:
import logging
logging.basicConfig()
logging.getLogger().setLevel(logging.DEBUG)
logging.getLogger('foo').debug('bah')
logging.getLogger().setLevel(logging.INFO)
logging.getLogger('foo').debug('bah')
Notez également que les "enregistreurs" et leurs "gestionnaires" ont tous deux des niveaux de journalisation distincts. Donc, si vous avez déjà explicitement chargé une configuration de consignateur complexe en vous Python), et que cela a gâché le (s) gestionnaire (s) du consignateur racine, cela peut alors avoir un effet et changer le Les enregistreurs enregistrent le niveau de journalisation avec logging.getLogger().setLevel(..)
risque de ne pas fonctionner, car le gestionnaire attaché peut avoir un niveau de journalisation défini indépendamment. Il est peu probable que ce soit le cas et ne vous préoccupez pas normalement.
J'utilise la configuration suivante pour la journalisation
Créez un fichier yaml appelé logging.yml comme ceci
version: 1
formatters:
simple:
format: "%(name)s - %(lineno)d - %(message)s"
complex:
format: "%(asctime)s - %(name)s - %(lineno)d - %(message)s"
handlers:
console:
class: logging.StreamHandler
level: DEBUG
formatter: simple
file:
class: logging.handlers.TimedRotatingFileHandler
when: midnight
backupCount: 5
level: DEBUG
formatter: simple
filename : Thrift.log
loggers:
qsoWidget:
level: INFO
handlers: [console,file]
propagate: yes
__main__:
level: DEBUG
handlers: [console]
propagate: yes
Le module "principal" devrait ressembler à ceci
import logging.config
import logging
with open('logging.yaml','rt') as f:
config=yaml.safe_load(f.read())
f.close()
logging.config.dictConfig(config)
logger=logging.getLogger(__name__)
logger.info("Contest is starting")
Ceux-ci devraient commencer comme ça
import logging
class locator(object):
def __init__(self):
self.logger = logging.getLogger(__name__)
self.logger.debug('{} initialized')
J'espère que ça vous aide ...