import os import datetime from enum import Enum class LogLevel(Enum): ERROR = 1 WARNING = 2 INFO = 3 DEBUG = 4 def __gt__(self, other): return self.value > other.value def __lt__(self, other): return self.value < other.value class LogPeriod(Enum): ONE = 1 HOURLY = 2 DAILY = 3 WEEKLY = 4 MONTHLY = 5 class Logger: def __init__(self, path, file_name, sep=',', endl='\n', period=LogPeriod.ONE, level=LogLevel.INFO, out_time_f='%Y.%m.%d %H:%M:%S'): self._path = path self._file_name = file_name self._sep = sep + ' ' self._endl = endl self._period = period self._level = level self._out_time_f = out_time_f def _get_file(self)->str: now = datetime.datetime.now() f_name = '' if self._period == LogPeriod.HOURLY: f_name = now.strftime('%Y.%m.%d %H') elif self._period == LogPeriod.DAILY: f_name = now.strftime('%Y.%m.%d') elif self._period == LogPeriod.WEEKLY: f_name = str(now.year) + ' KW ' + str(now.isocalendar().week) elif self._period == LogPeriod.MONTHLY: f_name = now.strftime('%Y.%m') return f_name + ' ' + self._file_name def _write(self, level, message): info_str = self._get_time() + self._sep + level.name + self._sep + message + self._endl path_to_file = self._path+os.sep+self._get_file() try: if os.path.exists(path_to_file): with open(path_to_file, '+a') as file: file.write(info_str) else: with open(path_to_file, '+a') as file: file.write("DATETIME" + self._sep + "LEVEL" + self._sep + "MESSAGE" + self._endl) file.write(info_str) except PermissionError as e: print(e) def _get_time(self)->str: now = datetime.datetime.now() timestr = now.strftime(self._out_time_f) return timestr def error(self, *args, **kwargs): mystr = ' '.join(list(args)) self._write(LogLevel.ERROR, mystr) def warning(self, *args, **kwargs): if self._level < LogLevel.WARNING: return mystr = ' '.join(list(args)) self._write(LogLevel.WARNING, mystr) def info(self, *args, **kwargs): if self._level < LogLevel.INFO: return mystr = ' '.join(list(args)) self._write(LogLevel.INFO, mystr) def debug(self, *args, **kwargs): if self._level < LogLevel.DEBUG: return mystr = ' '.join(list(args)) self._write(LogLevel.DEBUG, mystr) if __name__ == '__main__': log = Logger('.', 'mylog.csv', level=LogLevel.DEBUG, period=LogPeriod.HOURLY) log.info('Hallo info') log.error('Hallo error') log.warning('Hallo warning') log.debug('Hallo debug')