Spaces:
Build error
Build error
# 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() | |