File indexing completed on 2026-04-10 08:39:07
0001 __author__ = "retmas"
0002
0003 import logging
0004 import logging.config
0005 import logging.handlers
0006
0007
0008 class Singleton(type):
0009 def __init__(cls, *args, **kwargs):
0010 super(Singleton, cls).__init__(*args, **kwargs)
0011 cls._instance = None
0012
0013 def __call__(cls, *args, **kwargs):
0014 if cls._instance is None:
0015 cls._instance = super(Singleton, cls).__call__(*args, **kwargs)
0016 return cls._instance
0017
0018
0019 class Logger(object, metaclass=Singleton):
0020 _config = {
0021 "version": 1,
0022 "disable_existing_loggers": False,
0023 "formatters": {"default": {"format": "[%(asctime)s] [%(process)d] [%(levelname)s] [%(module)s] [%(funcName)s:%(lineno)d] - %(message)s"}},
0024 "handlers": {
0025 "console": {
0026 "level": "DEBUG",
0027 "class": "logging.StreamHandler",
0028 "formatter": "default",
0029 }
0030 },
0031 "loggers": {"snakeparser.log": {"handlers": ["console"], "level": "INFO"}},
0032 }
0033
0034 def __init__(self):
0035 logging.config.dictConfig(self._config)
0036
0037 @staticmethod
0038 def set_level(level):
0039 Logger.get().setLevel(level)
0040
0041 @staticmethod
0042 def set_log_file(filename, max_bytes=0, backup_count=0, remove_console=False):
0043 logger = Logger().get()
0044 handler = logging.handlers.RotatingFileHandler(filename, maxBytes=max_bytes, backupCount=backup_count, encoding="utf-8")
0045 handler.formatter = logger.handlers[0].formatter
0046 handler.level = logging.DEBUG
0047 logger.addHandler(handler)
0048 if remove_console:
0049 logger.removeHandler(logger.handlers[0])
0050
0051 @staticmethod
0052 def get() -> logging.Logger:
0053 return logging.getLogger(__name__)