commit d67023443742746cd449727622b30f5688ddfb7d Author: alex Date: Sat Mar 29 10:41:29 2025 +0100 first commit diff --git a/logger.py b/logger.py new file mode 100644 index 0000000..60c3981 --- /dev/null +++ b/logger.py @@ -0,0 +1,99 @@ +import os +import datetime +from enum import Enum + + +class LogLevel(Enum): + ERROR = 1 + WARNING = 2 + INFO = 3 + DEBUG = 4 + + def __gt__(self, other): + print(self, other, self.value>other.value) + 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') + log.error('Hallo') + log.warning('Hallo') + log.debug('Hallo') +