Quelque part dans les entrailles de mon code, j'ai quelque chose comme:
logger = logging.getLogger('debug0.x')
D'après ce que je comprends, cela devrait seulement répondre quand j'ai déjà fait quelque chose comme:
logging.basicConfig(filename='10Nov2010a.txt',level=logging.DEBUG, name='debug0')
notez que nom a été défini comme debug. Cependant, j’ai découvert que si
logging.basicConfig(filename='10Nov2010a.txt',level=logging.DEBUG)
sans le mot-clé name, puis l'enregistreur debug0.x défini ci-dessus réagit et écrit dans le fichier journal. Je pensais qu'il ne réagirait que dans le premier cas, lorsque le bûcheron aurait été nommé.
Je suis confus.
Le module Python logging
organise les enregistreurs dans une hiérarchie. Tous les enregistreurs sont des descendants de l'enregistreur racine. Chaque enregistreur transmet les messages de journal à son parent.
De nouveaux enregistreurs sont créés avec la fonction getLogger()
. L'appel de fonction logging.getLogger('debug0.x')
crée un enregistreur x
qui est un enfant de debug0
Qui lui-même est un enfant de l'enregistreur racine. Lors de la connexion à cet enregistreur, il transmettra le message à son parent et son parent transmettra le message à l'enregistreur racine. Vous avez configuré l'enregistreur racine pour qu'il se connecte à un fichier à l'aide de la fonction basicConfig()
, votre message finira donc là.
Si vous extrayez le code ou le document:
>>> print logging.basicConfig.__doc__
Do basic configuration for the logging system.
This function does nothing if the root logger already has handlers
configured. ...............
A number of optional keyword arguments may be specified, which can alter
the default behaviour.
filename Specifies that a FileHandler be created, using the specified
filename, rather than a StreamHandler.
filemode Specifies the mode to open the file, if filename is specified
(if filemode is unspecified, it defaults to 'a').
format Use the specified format string for the handler.
datefmt Use the specified date/time format.
level Set the root logger level to the specified level.
stream Use the specified stream to initialize the StreamHandler. Note
that this argument is incompatible with 'filename' - if both
are present, 'stream' is ignored.
logging.basicConfig n'utilise pas du tout l'argument nom. Il initialise l'enregistreur racine. Alors que getLogger prend un argument "nom"
>>> print logging.getLogger.__doc__
Return a logger with the specified name, creating it if necessary.
If no name is specified, return the root logger.