# coding: utf-8 # Copyright (c) 2025 inclusionAI. import logging LOG_FORMAT = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' logging.basicConfig(level=logging.INFO, format=LOG_FORMAT) # common logger info logger = logging.getLogger("common") # for trace info trace_logger = logging.getLogger("traced") class Color: black = '\033[30m' red = '\033[31m' green = '\033[32m' orange = '\033[33m' blue = '\033[34m' purple = '\033[35m' cyan = '\033[36m' lightgrey = '\033[37m' darkgrey = '\033[90m' lightred = '\033[91m' lightgreen = '\033[92m' yellow = '\033[93m' lightblue = '\033[94m' pink = '\033[95m' lightcyan = '\033[96m' reset = '\033[0m' bold = '\033[01m' disable = '\033[02m' underline = '\033[04m' reverse = '\033[07m' strikethrough = '\033[09m' def color_log(value, color: str = Color.black, logger_: logging.Logger = logger, level: int = logging.INFO, hightlight_key=None): """ Colored value or highlight key in log. Args: value: color: Color hightlight_key: Color segment key. """ if hightlight_key is None: logger_.log(level, f"{color} {value} {Color.reset}") else: logger_.log(level, f"{color} {hightlight_key}: {Color.reset} {value}") def aworld_log(logger, color: str = Color.black, level: int = logging.INFO): """Colored log style in the Aworld. Args: color: Default color set, different types of information can be set in different colors. level: Log level. """ def_color = color def decorator(value, color: str = None): # Set color in the called. if color: color_log(value, color, logger, level) else: color_log(value, def_color, logger, level) return decorator def init_logger(logger: logging.Logger): logger.debug = aworld_log(logger, color=Color.lightgrey, level=logging.DEBUG) logger.info = aworld_log(logger, color=Color.black, level=logging.INFO) logger.warning = aworld_log(logger, color=Color.orange, level=logging.WARNING) logger.warn = logger.warning logger.error = aworld_log(logger, color=Color.red, level=logging.ERROR) logger.fatal = logger.error init_logger(logger) init_logger(trace_logger)