Pranjal2041's picture
Initial demo
970a7a2
# An Advanced Logger class which writes data in a well formatted manner
# to files based on different priorities.
from enum import Enum
import os
import datetime
import time
class LogPriority(Enum):
"""
Enum class for different log priorities.
"""
LOW = 0
MEDIUM = 1
HIGH = 2
STATS = 3
class AdvancedLogger:
def __init__(self, base_dir):
self.base_dir = base_dir
self.files = []
self.file_names = []
for p in LogPriority:
self.file_names.append(os.path.join(self.base_dir, f'Log_{p.name}' + '.log'))
self.files.append(open(self.file_names[-1], 'w'))
self.last_log_time = -1
def flush(self):
for f in self.files:
f.close()
for i in range(len(self.files)):
self.files[i] = open(self.file_names[i], 'a')
def log(self, *args, priority = LogPriority.LOW):
to_log = ' '.join(map(str, args))
if priority.value <= LogPriority.MEDIUM.value:
# Add current time to to_log
now = datetime.datetime.now()
to_log = f'[{now.strftime("%H:%M:%S")}]: {to_log}'
print(to_log)
for p in range(priority.value+1):
self.files[p].write(to_log + '\n')
# If time - last_log_time is greater than 10s or Priority is HIGH or above close the file and re-open in append mode
if time.time() - self.last_log_time > 10 or priority.value >= LogPriority.HIGH.value:
self.flush()
self.last_log_time = time.time()