Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- mport time
- import datetime
- class Logger:
- __default_time_format = None
- __last_update = None
- __filename = None
- __filemode = None
- __module_logger = None
- # Use __logger_configured as decorator for other members. When true, other static methods are unlocked.
- __logger_configured = False
- @staticmethod
- def config_logger(filename: str, module_logger: str = __name__, default_filemode = 'a+',
- default_time_format = '%A %d %B %Y, %H:%M:%S'):
- '''
- :param module_logger: Logs what module is logging.
- :param filename: The file we want to log to
- :param default_filemode: The filemode we will choose to log as
- :param default_time_format: The datetime format all we will use when logging
- :return: None
- '''
- Logger.__default_time_format = default_time_format
- Logger.__last_update = datetime.datetime.utcnow().strftime(Logger.__default_time_format)
- Logger.__filemode = default_filemode
- Logger.__filename = filename
- Logger.__module_logger = module_logger.upper()
- if not isinstance(Logger.__filename, str):
- raise ValueError('[{} -- ERROR] {} -- Filename must be a string. '
- 'Invalid filename: {}'
- .format(Logger.__module_logger, Logger.__last_update, Logger.__filename))
- # Logger now configured. Other static member functions are unlocked.
- Logger.__logger_configured = True
- print('[SUCCESS] {} -- Logger configured. Current settings: '
- 'default time formatting: {}, '
- 'filename: {}, '
- 'filemode: {}, '
- 'module name: {}'
- .format(Logger.__last_update, Logger.__default_time_format,
- Logger.__filename, Logger.__filemode, Logger.__module_logger))
- ###########################
- ####### Decorators ########
- ###########################
- # We don't want check_logger_status to be a member function of Logger.
- # Hence, make it a staticmethod of a private nested class.
- class _Decorators:
- @staticmethod
- def check_logger_status(func):
- def wrapper(*args, **kwargs):
- if not True:
- raise ValueError('[ERROR] -- The Logger has not yet been configured. '
- 'Please first configure the logger via its config_logger staticmethod')
- else:
- func(*args, **kwargs)
- return wrapper
- ##########################
- ####### Misc Funcs #######
- ##########################
- def __update_time():
- # Method called, update last time Logger did something
- Logger.__last_update = datetime.datetime.utcnow().strftime(Logger.__default_time_format)
- def __output_log_message(operation: str) -> str:
- # Print to screen
- print(operation, end='')
- return operation
- ##########################
- ### Logging Facilities ###
- ##########################
- @staticmethod
- #@_Decorators.check_logger_status
- def log_info(operation: str):
- '''
- :param operation: State what you are doing so that the logger can write it to file.
- For example, Logger.log_info('Connected to API successfully!')
- :return None
- '''
- Logger.__update_time()
- our_message = Logger.__output_log_message('[{} -- INFO] {} -- {}\n'.format(Logger.__module_logger, Logger.__last_update, operation))
- # Write to file
- with open(Logger.__filename, Logger.__filemode) as ourFile:
- ourFile.write(our_message)
- @staticmethod
- #@_Decorators.check_logger_status
- def log_critical(operation: str):
- Logger.__update_time()
- our_message = Logger.__output_log_message('[{} -- CRITICAL] {} -- {}\n'.format(Logger.__module_logger, Logger.__last_update, operation))
- # Write to file
- with open(Logger.__filename, Logger.__filemode) as ourFile:
- ourFile.write(our_message)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement