module logging: personaliser le logger d'un module externe
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 :
Code:
1 2 3 4 5 6
|
.
|-- main.py
`-- module
|-- __init__.py
`-- mod.py |
Le fichier __init__.py est vide.
Le fichier mod.py contient :
Code:
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 :
Code:
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 :
Code:
1 2 3
|
monprog - CRITICAL - Message depuis le main
message critique |
Ce que je voudrais avoir :
Code:
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
Code:
logger = logging.getLogger('monprog.mod')
J'aurai eu
Code:
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.