A nice lightweight Python logger

import logging
import sys
from logging import Logger
from logging.handlers import TimedRotatingFileHandler, RotatingFileHandler


class LoggerX(Logger):
    def __init__(
            self,
            log_file='./log/loggerx.log',
            log_format="%(asctime)s | %(levelname)s | %(filename)s:%(lineno)s |  %(funcName)s |  %(message)s",
            *args,
            **kwargs
    ):
        self.formatter = logging.Formatter(log_format)
        self.log_file = log_file

        Logger.__init__(self, *args, **kwargs)

        self.addHandler(self.get_console_handler())
        if log_file:
            self.addHandler(self.get_file_rotating_handler())

        # with this pattern, it's rarely necessary to propagate the| error up to parent
        self.propagate = False

    def get_console_handler(self):
        console_handler = logging.StreamHandler(sys.stdout)
        console_handler.setLevel(logging.DEBUG)
        console_handler.setFormatter(self.formatter)
        return console_handler

    def get_file_rotating_handler(self):
        file_handler = RotatingFileHandler(self.log_file,
                                           maxBytes=500000000, # 500MB
                                           backupCount=10)

        file_handler.setLevel(logging.DEBUG)
        file_handler.setFormatter(self.formatter)
        return file_handler

loggerx = LoggerX(name='__loggerx__')