def __init__(self, source, name, propagate):
        """
        Initializes the logger
        """
        parent_invoker = inspect.stack()[1]
        if not __file__.startswith(
                parent_invoker[1]) or parent_invoker[3] != 'get':
            raise RuntimeError(
                'Cannot invoke instance from outside this class. Please use LogHandler.get(source, name=None) instead'
            )

        if name is None:
            name = 'logger'

        formatter = OVSFormatter(
            '%(asctime)s - %(hostname)s - %(process)s/%(thread)d - {0}/%(name)s - %(sequence)s - %(levelname)s - %(message)s'
            .format(source))

        target_definition = LogHandler.load_target_definition(
            source, allow_override=True)
        if target_definition['type'] == 'redis':
            from redis import Redis
            from ovs.log.redis_logging import RedisListHandler
            self.handler = RedisListHandler(
                queue=target_definition['queue'],
                client=Redis(host=target_definition['host'],
                             port=target_definition['port']))
        elif target_definition['type'] == 'file':
            self.handler = logging.FileHandler(target_definition['filename'])
        else:
            self.handler = logging.StreamHandler(sys.stdout)

        self.unittest_mode = False
        if os.environ.get('RUNNING_UNITTESTS') == 'True':
            self.unittest_mode = True
        self.handler.setFormatter(formatter)
        self.logger = logging.getLogger(name)
        self.logger.addHandler(self.handler)
        self.logger.propagate = propagate
        self.logger.setLevel(getattr(logging, 'DEBUG'))
        self._key = '{0}_{1}'.format(source, name)