import logging # TODO: logrotate # TODO: send logs to syslog # TODO: represent in grafana class LumberJack: def __init__(self, log_level='debug', log_file='power_api.log', log_filemode='a', log_format='{asctime} - {levelname} - {message}', log_date_format='%Y-%m-%d %H:%M:%S'): if not log_level: log_level = 'debug' if not log_file: log_file = 'power_api.log' if not log_filemode: log_filemode = 'a' if not log_format: log_format = '{asctime} - {levelname} - {message}' if not log_date_format: log_date_format = '%Y-%m-%d %H:%M:%S' self.loglevel = self.configure_log_level(log_level) self.filename = log_file self.filemode = log_filemode self.format = log_format self.datefmt = log_date_format self.set_config() def set_config(self): logging.basicConfig( level=self.loglevel, filename=self.filename, filemode=self.filemode, format=self.format, style="{", datefmt=self.datefmt ) def set_log_level(self,l): self.loglevel = self.configure_log_level(l) @staticmethod def configure_log_level(l): if l.lower() in 'debug': level = logging.DEBUG elif l.lower() in 'info': level = logging.INFO elif l.lower() in 'warning': level = logging.WARNING elif l.lower() in 'error': level = logging.ERROR elif l.lower() in 'critical': level = logging.CRITICAL else: level = logging.DEBUG return level def set_filename(self,n): self.filename = n self.set_config() # LumberJack() axe = logging.getLogger()