Advertisement
Guest User

doublepoop

a guest
Dec 5th, 2019
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.13 KB | None | 0 0
  1. mport time
  2. import datetime
  3.  
  4. class Logger:
  5.  
  6.     __default_time_format = None
  7.     __last_update = None
  8.     __filename = None
  9.     __filemode = None
  10.     __module_logger = None
  11.  
  12.     # Use __logger_configured as decorator for other members. When true, other static methods are unlocked.
  13.     __logger_configured = False
  14.  
  15.     @staticmethod
  16.     def config_logger(filename: str, module_logger: str = __name__, default_filemode = 'a+',
  17.                       default_time_format = '%A %d %B %Y, %H:%M:%S'):
  18.  
  19.         '''
  20.       :param module_logger: Logs what module is logging.
  21.       :param filename: The file we want to log to
  22.       :param default_filemode: The filemode we will choose to log as
  23.       :param default_time_format: The datetime format all we will use when logging
  24.       :return: None
  25.       '''
  26.  
  27.         Logger.__default_time_format = default_time_format
  28.         Logger.__last_update = datetime.datetime.utcnow().strftime(Logger.__default_time_format)
  29.         Logger.__filemode = default_filemode
  30.         Logger.__filename = filename
  31.         Logger.__module_logger = module_logger.upper()
  32.  
  33.         if not isinstance(Logger.__filename, str):
  34.             raise ValueError('[{} -- ERROR] {} -- Filename must be a string. '
  35.                              'Invalid filename: {}'
  36.                              .format(Logger.__module_logger, Logger.__last_update, Logger.__filename))
  37.  
  38.         # Logger now configured. Other static member functions are unlocked.
  39.         Logger.__logger_configured = True
  40.  
  41.         print('[SUCCESS] {} -- Logger configured. Current settings: '
  42.               'default time formatting: {}, '
  43.               'filename: {}, '
  44.               'filemode: {}, '
  45.               'module name: {}'
  46.               .format(Logger.__last_update, Logger.__default_time_format,
  47.                       Logger.__filename, Logger.__filemode, Logger.__module_logger))
  48.  
  49.  
  50.     ###########################
  51.     ####### Decorators ########
  52.     ###########################
  53.  
  54.     # We don't want check_logger_status to be a member function of Logger.
  55.     # Hence, make it a staticmethod of a private nested class.
  56.     class _Decorators:
  57.  
  58.         @staticmethod
  59.         def check_logger_status(func):
  60.             def wrapper(*args, **kwargs):
  61.                 if not True:
  62.                     raise ValueError('[ERROR] -- The Logger has not yet been configured. '
  63.                                      'Please first configure the logger via its config_logger staticmethod')
  64.                 else:
  65.                     func(*args, **kwargs)
  66.             return wrapper
  67.  
  68.     ##########################
  69.     ####### Misc Funcs #######
  70.     ##########################
  71.  
  72.     def __update_time():
  73.         # Method called, update last time Logger did something
  74.         Logger.__last_update = datetime.datetime.utcnow().strftime(Logger.__default_time_format)
  75.  
  76.     def __output_log_message(operation: str) -> str:
  77.         # Print to screen
  78.         print(operation, end='')
  79.         return operation
  80.  
  81.     ##########################
  82.     ### Logging Facilities ###
  83.     ##########################
  84.  
  85.     @staticmethod
  86.     #@_Decorators.check_logger_status
  87.     def log_info(operation: str):
  88.  
  89.         '''
  90.       :param operation: State what you are doing so that the logger can write it to file.
  91.                         For example, Logger.log_info('Connected to API successfully!')
  92.       :return None
  93.       '''
  94.  
  95.         Logger.__update_time()
  96.         our_message = Logger.__output_log_message('[{} -- INFO] {} -- {}\n'.format(Logger.__module_logger, Logger.__last_update, operation))
  97.  
  98.         # Write to file
  99.         with open(Logger.__filename, Logger.__filemode) as ourFile:
  100.             ourFile.write(our_message)
  101.  
  102.  
  103.     @staticmethod
  104.     #@_Decorators.check_logger_status
  105.     def log_critical(operation: str):
  106.  
  107.         Logger.__update_time()
  108.         our_message = Logger.__output_log_message('[{} -- CRITICAL] {} -- {}\n'.format(Logger.__module_logger, Logger.__last_update, operation))
  109.  
  110.         # Write to file
  111.         with open(Logger.__filename, Logger.__filemode) as ourFile:
  112.             ourFile.write(our_message)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement