Open psychemedia opened 1 month ago
For the glog
thing, ChatGPT suggests:
# File: logger.py
# Then in __init__.py:
#from .logger import GroupLoggers
import logging
class GroupLoggers:
def __init__(self, logger_names):
self.loggers = {}
for name in logger_names:
logger = logging.getLogger(name)
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
handler.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
handler.setFormatter(formatter)
logger.addHandler(handler)
self.loggers[name] = logger
def set_level(self, logger_name, level):
if logger_name in self.loggers:
self.loggers[logger_name].remove() # Remove existing handlers to reconfigure level
self.loggers[logger_name].add(level=level)
else:
raise ValueError(f"Logger '{logger_name}' not found.")
def log(self, level, message, logger_name):
if logger_name in self.loggers:
logger = self.loggers[logger_name]
if level == 'debug':
logger.debug(message)
elif level == 'info':
logger.info(message)
elif level == 'warning':
logger.warning(message)
elif level == 'error':
logger.error(message)
elif level == 'critical':
logger.critical(message)
else:
raise ValueError(f"Unsupported log level: {level}")
else:
raise ValueError(f"Logger '{logger_name}' not found")
def debug(self, message, logger_name):
self.log('debug', message, logger_name)
def info(self, message, logger_name):
self.log('info', message, logger_name)
def warning(self, message, logger_name):
self.log('warning', message, logger_name)
def error(self, message, logger_name):
self.log('error', message, logger_name)
def critical(self, message, logger_name):
self.log('critical', message, logger_name)
with usage:
from ou_logger import GroupLoggers
# Define loggers
glog = GroupLoggers(["logger1", "logger2"])
# Set logging levels
glog.set_level("logger1", "DEBUG")
glog.set_level("logger2", "ERROR")
# Log message
glog.error("An error message for logger2", "logger2")
glog.info("An info message for logger1", "logger1")
We'd also need to be able to set the handler, eg to text, tts, both, etc.
It would be useful if users could create multiple loggers in a very simple way.
So maybe an interaction like:
Or maybe something along the lines of:
Need to check the docs - eg
logging.getLogger()
, logging filters, child / parent loggers, etc.