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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
monprog - CRITICAL - Message depuis le main
message critique
Ce que je voudrais avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
logger = logging.getLogger('monprog.mod')
J'aurai eu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.