#!/usr/bin/env python # -*- coding: utf-8 -*- """ GUI 日志配置模块 统一配置 GUI 应用和控制台的日志输出 """ import logging from typing import Dict from tkinter import font as tk_font # 日志格式配置 LOG_FORMAT = '%(asctime)s [%(levelname)s] %(message)s' DATE_FORMAT = '%Y-%m-%d %H:%M:%S' class LogTheme: """ 统一的日志主题配置 提供颜色、字体等样式配置,支持未来的主题切换(如暗色模式) """ # 颜色方案 COLORS = { 'INFO': '#000000', # 黑色 'SUCCESS': '#008000', # 绿色 'WARNING': '#FF8C00', # 深橙色 'ERROR': '#FF0000', # 红色 'DEBUG': '#808080', # 灰色 } # 字体配置 FONTS = { 'DEFAULT': ('TkDefaultFont', 9), 'HEADER': ('TkDefaultFont', 10, 'bold'), 'MONOSPACE': ('Consolas', 9), 'MONOSPACE_SMALL': ('Consolas', 8), } # 背景颜色(用于未来的暗色模式支持) BACKGROUNDS = { 'LIGHT': '#FFFFFF', 'DARK': '#1E1E1E', } # 当前主题 _current_theme = 'LIGHT' @classmethod def get_color(cls, level: str) -> str: """ 获取指定日志级别的颜色 Args: level: 日志级别 (INFO, SUCCESS, WARNING, ERROR, DEBUG) Returns: 颜色值(十六进制字符串) """ return cls.COLORS.get(level.upper(), '#000000') @classmethod def get_font(cls, font_name: str = 'DEFAULT'): """ 获取指定字体配置 Args: font_name: 字体名称 (DEFAULT, HEADER, MONOSPACE, MONOSPACE_SMALL) Returns: 字体配置元组 """ return cls.FONTS.get(font_name, cls.FONTS['DEFAULT']) @classmethod def set_theme(cls, theme: str): """ 设置主题(LIGHT 或 DARK) Args: theme: 主题名称 """ if theme.upper() in ['LIGHT', 'DARK']: cls._current_theme = theme.upper() @classmethod def get_background(cls) -> str: """ 获取当前主题的背景颜色 Returns: 背景颜色值 """ return cls.BACKGROUNDS.get(cls._current_theme, '#FFFFFF') def setup_gui_logging(level=logging.INFO): """ 初始化 GUI 应用的日志配置 Args: level: 日志级别,默认为 INFO Returns: logging.Logger: 根 logger """ logging.basicConfig( level=level, format=LOG_FORMAT, datefmt=DATE_FORMAT, force=True # 确保重新配置(即使之前配置过) ) return logging.getLogger() def get_logger(name): """ 获取指定名称的 logger Args: name: logger 名称,通常使用 __name__ Returns: logging.Logger: logger 实例 """ return logging.getLogger(name)