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)