Logging in python

Version 1: One of the best thus far

  •     import logging
        from logging.handlers import RotatingFileHandler
        import argparse
        import asyncio
    
        class ABC:
            def __init__(self, logger):
                self.logger = logger
                
            async def run(self):
                self.logger.info("Starting process")
    
        def setup_logging(log_level:str = "INFO", log_file="./abc.log"):
            logger = logging.getLogger(__name__)
            logger.setLevel(log_level)
    
            formatter = logging.Formatter(
                "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
                "[File: %(pathname)s, Line: %(lineno)d, Func: %(funcName)s]",
                datefmt="%Y-%m-%d %H:%M:%S",)
    
            console_handler = logging.StreamHandler()
            console_handler.setLevel(log_level)
            console_handler.setFormatter(formatter)
            logger.addHandler(console_handler)
    
            file_handler = RotatingFileHandler(log_file, maxBytes=5*1024*1024, backupCount=2)
            file_handler.setLevel(log_level)
            file_handler.setFormatter(formatter)
            logger.addHandler(file_handler)
    
            return logger
    
    
        def main():
            parser = argparse.ArgumentParser(description="ABC process")
            parser.add_argument("--log-level", default="INFO", help="Set the logging level", choices=["DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"])
            args = parser.parse_args()
    
            log_level = getattr(logging, args.log_level.upper(), logging.INFO)
            logger = setup_logging(log_level, args.log_file)
    
            abc = ABC(logger)
            asyncio.run(abc.run())
                
        if __name__ == "__main__":
            main()