Source code for qdesignoptimizer.logger
"""Logging configuration with custom formatting."""
import json
import logging
LOG_LEVEL = logging.INFO
[docs]
class CustomHandler(logging.StreamHandler):
"""Custom handler for logging."""
def __init__(self):
"""Initialize custom handler."""
super().__init__()
self.FORMATS = None
[docs]
def format(self, record):
"""Format the record with specific format."""
fmt = "[%(levelname)s|%(asctime)s]: %(message)s"
grey = "\x1b[38;20m"
green = "\x1b[92m"
yellow = "\x1b[33;20m"
red = "\x1b[31;20m"
bold_red = "\x1b[31;1m"
reset = "\x1b[0m"
self.FORMATS = {
logging.DEBUG: green + fmt + reset,
logging.INFO: grey + fmt + reset,
logging.WARNING: yellow + fmt + reset,
logging.ERROR: red + fmt + reset,
logging.CRITICAL: bold_red + fmt + reset,
}
log_fmt = self.FORMATS.get(record.levelno)
return logging.Formatter(log_fmt, datefmt="%Y-%m-%d %H:%M:%S").format(record)
handlers = logging.getLogger().handlers
handler_console = None
for h in handlers:
if isinstance(h, logging.StreamHandler):
handler_console = h
break
if handler_console is None:
handler_console = logging.StreamHandler()
if handler_console is not None:
# first we need to remove to avoid duplication
logging.getLogger().removeHandler(handler_console)
log = logging.getLogger(__name__)
log.setLevel(LOG_LEVEL)
log.addHandler(CustomHandler())
[docs]
def dict_log_format(data: dict) -> str:
"""Return formatted dictionary for pretty printing inside log messages."""
return "\n" + json.dumps(data, indent=4)