#!/usr/bin/python3 import sys import os import logging class Logger: main_logger = logging.getLogger() main_file_name = None main_logger_name = None INFO = logging.INFO getLogger = logging.getLogger def init_logger(log_name, level=INFO): if not os.path.isdir('./Logs'): os.mkdir('Logs') Logger.main_file_name = 'Logs/{}'.format(log_name) Logger.main_logger_name = log_name logger = logging.getLogger(Logger.main_logger_name) Logger.main_logger.setLevel(logging.INFO) Logger.default_format = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') Logger.set_formatter(logger=logger, log_file_name='main_file_name') def set_formatter(logger, formatter=None, log_file_name=None): if formatter is None: if not getattr(logger, 'handlers', False): formatter = Logger.default_format else: formatter = logger.handlers[0] for hdlr in logger.handlers[:]: # remove all old handlers logger.removeHandler(hdlr) file_name = log_file_name + ".log" setattr(Logger, 'main_file_name', str(file_name)) handler = logging.FileHandler(getattr(Logger, 'main_file_name')) handler.setFormatter(formatter) if logger is not None: logger.addHandler(handler) setattr(Logger, 'main_logger', logger) class TestClass: logger_details = {} def logger_refresh(self): Logger.set_formatter( logger=logging.getLogger(getattr(Logger, 'main_logger_name')), log_file_name='Logs/{}.{}'.format( 'test', self.logger_details.get('source') ) ) def main(self): Logger.init_logger(log_name='test_logger') Logger.main_logger.info('Adding a line into main logger') for source in range(1000): self.logger_details.update(source=source) self.logger_refresh() Logger.main_logger.info('Adding a line into {}'.format(source)) for source in range(1000): self.logger_details.update(source=source) self.logger_refresh() Logger.main_logger.error('Adding an error line into {}'.format(source)) testobj = TestClass() testobj.main()