You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
48 lines
1.3 KiB
"""
|
|
全局日志管理器
|
|
"""
|
|
from PyQt5.QtCore import QObject, pyqtSignal
|
|
|
|
# --- 1. 定义信号发射器 ---
|
|
class SignalEmitter(QObject):
|
|
log_signal = pyqtSignal(str, str)
|
|
|
|
# --- 2. 定义 Logger 类 (这是之前缺失的核心) ---
|
|
class Logger:
|
|
def __init__(self):
|
|
# 创建信号发射器实例
|
|
self.emitter = SignalEmitter()
|
|
# 连接信号到槽函数
|
|
self.emitter.log_signal.connect(self._on_log_received)
|
|
# 存储回调函数(即日志面板的接收方法)
|
|
self.log_callbacks = []
|
|
|
|
def _on_log_received(self, message, level):
|
|
"""实际处理日志的地方"""
|
|
for callback in self.log_callbacks:
|
|
callback(message, level)
|
|
|
|
def add_listener(self, func):
|
|
"""注册日志监听者"""
|
|
self.log_callbacks.append(func)
|
|
|
|
def log(self, msg, level="INFO"):
|
|
"""供其他模块调用的方法"""
|
|
self.emitter.log_signal.emit(msg, level)
|
|
|
|
# 便捷方法
|
|
def info(self, msg):
|
|
self.log(msg, "INFO")
|
|
|
|
def debug(self, msg):
|
|
self.log(msg, "DEBUG")
|
|
|
|
def warning(self, msg):
|
|
self.log(msg, "WARNING")
|
|
|
|
def error(self, msg):
|
|
self.log(msg, "ERROR")
|
|
|
|
# --- 3. 创建全局实例 ---
|
|
# 这行代码必须在类定义之后
|
|
logger = Logger()
|