logger/logger.py

99 lines
2.8 KiB
Python

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')