Bonjour,
Je vous pose cette question pour laquelle je n'ai trouvé de réponse ni dans la doc, ni sur le net. Je passe peut être à coté de qqch d'évident...
Soit l'arborescence suivante :
1 2 3 4 5 6
|
.
|-- main.py
`-- module
|-- __init__.py
`-- mod.py |
Le fichier __init__.py est vide.
Le fichier mod.py contient :
1 2 3 4 5 6 7 8
| #!/usr/bin/env python
# -*- coding: utf-8 -*-
import logging
logger = logging.getLogger(__name__)
def mafunc():
logger.critical('message critique') |
Noter que comme le recommande la doc, je ne mets pas de formatter ni de level dans la lib.
Mon fichier main.py contient :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| #!/usr/bin/env python
# -*- coding: utf-8 -*-
from module import mod
import logging
######
#LOGS
######
logger = logging.getLogger('monprog')
#Console
consolehandler = logging.StreamHandler()
consolehandler.setLevel(logging.ERROR)
formatter = logging.Formatter('%(name)s - %(levelname)s - %(message)s')
consolehandler.setFormatter(formatter)
logger.addHandler(consolehandler)
def main():
logger.critical('Message depuis le main')
mod.mafunc()
if __name__ == '__main__':
main() |
La sortie est la suivante :
1 2 3
|
monprog - CRITICAL - Message depuis le main
message critique |
Ce que je voudrais avoir :
1 2 3
|
monprog - CRITICAL - Message depuis le main
module.mod - CRITICAL - message critique |
En clair, je veux que la configuration que j'ai déclaré dans mon main.py soit utilisée pour les messages issues des libs externes (ici module.mod).
A noter que si dans mod.py j'avais écrit
logger = logging.getLogger('monprog.mod')
J'aurai eu
1 2 3
|
monprog - CRITICAL - Message depuis le main
monprog.mod - CRITICAL - message critique |
et ça, je le conçois très bien puisque par défaut il y a héritage pour les loggers fils.
Quelqu'un a t-il la solution ?
Merci.
Remarque : je travaille avec python 3.
Partager