99 lines
2.8 KiB
Python
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')
|
|
|