["python","logging","configuration","python-logging"]
How to change filehandle with Python logging on the fly with different classes and imports

I cannot perform an on-the-fly logging fileHandle change. For example, I have 3 classes one.py import logging class One(): def __init__(self,txt="?"): logging.debug("Hey, I'm the class One and I say: %s" % txt) two.py import logging class Two(): def __init__(self,txt="?"): logging.debug("Hey, I'm the class Two and I say: %s" % txt) config.py import logging class Config(): def __init__(self,logfile=None): logging.debug("Reading config") self.logfile(logfile) myapp from one import One from two import Two from config import Config import logging #Set default logging logging.basicConfig( level=logging.getLevelName(DEBUG), format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', filename=None ) logging.info("Starting with stdout") o=One(txt="STDOUT") c=Config(logfile="/tmp/logfile") # Here must be the code that change the logging configuration and set the filehandler t=One(txt="This must be on the file, not STDOUT") If I try loggin.basicConfig() again, it doesn't work.
Indeed, logging.basicConfig does nothing if a handler has been set up already: This function does nothing if the root logger already has handlers configured, unless the keyword argument force is set to True. You'll need to either add force=True (requires Python 3.8 or newer), or, alternatively, replace the current handler on the root logger: import logging fileh = logging.FileHandler('/tmp/logfile', 'a') formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') fileh.setFormatter(formatter) log = logging.getLogger() # root logger for hdlr in log.handlers[:]: # remove all old handlers log.removeHandler(hdlr) log.addHandler(fileh) # set the new handler See the Configuring Logging chapter in the Python Logging HOWTO.