My goal is to log from multiple modules, while only configuring the logger in one place - in the main program. As shown in this answer, one should include
logging.config.fileConfig('/path/to/logging.conf') 
in the main program, then in all other modules include
logger = logging.getLogger(__name__)
I believe that's what I've done below, yet I get unexpected behaviour.
c.py
# c.py
import logging
import logging.config
import d
logging.config.fileConfig("logging.conf")
logger = logging.getLogger(__name__)
logger.warning('logging from c')
d.foo()
d.py
# d.py
import logging
logger = logging.getLogger(__name__)
# this will print when d is imported
logger.warning('logging from d on import')
def foo():
    # this does not print
    logger.warning("logging from d on call foo()")
Output
$ python c.py
logging from d on import
logging from c
What I would expect, is that when d.foo() executes in c.py, that a message would be logged from d, however, that's not the case. This is confusing because when the logger is called from module level in d, it logs a message to the console, but when called from inside foo() it doesn't.
Config file
[loggers]
keys=root
[handlers]
keys=consoleHandler
[formatters]
keys=simpleFormatter
[logger_root]
level=DEBUG
handlers=consoleHandler
[handler_consoleHandler]
class=StreamHandler
level=DEBUG
formatter=simpleFormatter
args=(sys.stdout,)
[formatter_simpleFormatter]
format=%(message)s
datefmt=
Further analysis
So I've noticed that if I remove the line
logging.config.fileConfig("logging.conf")
from c.py, then logging from d.foo() works as expected. So there's either something wrong in the configuration file or due to the fact that I provide a configuration file something causes the logger in d.py to get messed up.
Question
- Why does a message get logged from dwhen called from module level, but not from insided.foo()?
- And how can I achieve the goal of logging from multiple modules, while only configuring the logging in the main program?
 
     
    