In the same folder I have three files: main.py, app_logger.py and mymodule.py with their contents:
# main.py import argparse import app_logger import mymodule import logging logger = app_logger.get_logger(__name__) def log_some_messages(): logger.debug(f'{__name__} - debug message') logger.info(f'{__name__} - info message') logger.warning(f'{__name__} - warning message') if __name__ == '__main__': parser = argparse.ArgumentParser(description="Script for executing data quality checks.") parser.add_argument("--log-level", default='info', choices=['notset', 'debug', 'info', 'warning', 'error', 'critical'], help="set log level") args = parser.parse_args() logger.setLevel(eval(f"logging.{args.log_level.upper()}")) log_some_messages() mymodule.log_some_messages() #mymodule.py import logging from script_logging import app_logger logger = app_logger.get_logger(__name__) def log_some_messages(): logger.debug(f'{__name__} - debug message') logger.info(f'{__name__} - info message') logger.warning(f'{__name__} - warning message') #app_logger.py import logging _log_format = f"%(asctime)s - [%(levelname)s] - %(name)s - (%(filename)s).%(funcName)s(%(lineno)d) - %(message)s" _log_level = logging.DEBUG def get_stream_handler(): stream_handler = logging.StreamHandler() stream_handler.setLevel(_log_level) stream_handler.setFormatter(logging.Formatter(_log_format)) return stream_handler def get_logger(name): logger = logging.getLogger(name) logger.setLevel(_log_level) logger.addHandler(get_stream_handler()) return logger When I run it with main.py --log-level debug I get the following output: 2021-01-25 13:21:01,151 - [DEBUG] - __main__ - (main.py).log_some_messages(10) - __main__ - debug message 2021-01-25 13:21:01,151 - [INFO] - __main__ - (main.py).log_some_messages(11) - __main__ - info message 2021-01-25 13:21:01,152 - [WARNING] - __main__ - (main.py).log_some_messages(12) - __main__ - warning message 2021-01-25 13:21:01,152 - [DEBUG] - mymodule - (mymodule.py).log_some_messages(10) - mymodule - debug message 2021-01-25 13:21:01,152 - [INFO] - mymodule - (mymodule.py).log_some_messages(11) - mymodule - info message 2021-01-25 13:21:01,152 - [WARNING] - mymodule - (mymodule.py).log_some_messages(12) - mymodule - warning message which is OK. If I change --log-level parameter to 'warning', than output is the following: 2021-01-25 13:22:12,760 - [WARNING] - __main__ - (main.py).log_some_messages(12) - __main__ - warning message 2021-01-25 13:22:12,760 - [DEBUG] - mymodule - (mymodule.py).log_some_messages(10) - mymodule - debug message 2021-01-25 13:22:12,761 - [INFO] - mymodule - (mymodule.py).log_some_messages(11) - mymodule - info message 2021-01-25 13:22:12,761 - [WARNING] - mymodule - (mymodule.py).log_some_messages(12) - mymodule - warning message As you can see, in main.py log level is set correctly, but in mymodule.py it is not. How to accept argparse.log_level parameter in if __name__ == '__main__': and propagate its value to all other modules? -- https://mail.python.org/mailman/listinfo/python-list