first commit
commit
d670234437
|
|
@ -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')
|
||||
|
||||
Loading…
Reference in New Issue