import logging
import logging.handlers as handlers
from logging import FileHandler

class RotationLogger:
    
    def __init__(self, logger_name, log_filename):
        
        self.logger = logging.getLogger(logger_name)
        #self.logger = multiprocessing.get_logger()
        self.logger.setLevel(logging.DEBUG)
        
        
        # check if there is already a handler for this logger_name
        # if there is a logger do not add another handler
        hasLoggerHandler = False
        for handler in self.logger.handlers:
            if handler.get_name() == logger_name:
                hasLoggerHandler = True
                break
        
        if not hasLoggerHandler:
            self.handler = handlers.TimedRotatingFileHandler(log_filename, backupCount=10, when='midnight',interval=1)
            self.handler.set_name(logger_name)
            formatter = logging.Formatter('%(asctime)s - %(process)s - %(name)s - %(levelname)s - %(message)s')
            self.handler.setFormatter(formatter)
            self.logger.addHandler(self.handler)

    def __del__(self):
        self.logger.handlers[0].close()

    def info(self, msg):
        
        self.logger.info(msg)
        
    def debug(self, msg):
        
        self.logger.debug(msg)
        
    def warning(self, msg):
        
        self.logger.warning(msg)
        
    def error(self, msg):
        
        self.logger.error(msg)
        
    def changeFormatter(self, format_str):
        
        for handler in self.logger.handlers:
            newFormat = logging.Formatter(format_str)
            handler.setFormatter(newFormat)

class SimpleLogger:

    def __init__(self, logger_name, log_filename):

        self.logger = logging.getLogger(logger_name)
        self.logger.setLevel(logging.INFO)

        # check if there is already a handler for this logger_name
        # if there is a logger do not add another handler
        hasLoggerHandler = False
        for handler in self.logger.handlers:
            if handler.get_name() == logger_name:
                hasLoggerHandler = True
                break

        if not hasLoggerHandler:
            logHandler = FileHandler(log_filename)
            formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
            logHandler.setFormatter(formatter)
            self.logger.addHandler(logHandler)

    def __del__(self):
        self.logger.handlers[0].close()
        
    def info(self, msg):
        
        self.logger.info(msg)
        
    def debug(self, msg):
        
        self.logger.debug(msg)
        
    def warning(self, msg):
        
        self.logger.warning(msg)
        
    def error(self, msg):
        
        self.logger.error(msg)

    def changeFormatter(self, format_str):
        
        for handler in self.logger.handlers:
            newFormat = logging.Formatter(format_str)
            handler.setFormatter(newFormat)
