Files
diskmanager2/logger_config.py
2026-02-07 14:58:56 +08:00

55 lines
1.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# logger_config.py
import logging
from PySide6.QtWidgets import QTextEdit
from PySide6.QtCore import Signal, QObject
class QTextEditLogger(logging.Handler, QObject):
"""
自定义的 logging 处理器,将日志消息发送到 QTextEdit 控件。
"""
# 定义一个信号,用于在 GUI 线程中更新 QTextEdit
append_text = Signal(str)
def __init__(self, widget: QTextEdit):
super().__init__()
QObject.__init__(self) # 初始化 QObject 部分
self.widget = widget
self.widget.setReadOnly(True) # 确保日志区域是只读的
# 连接信号到 QTextEdit 的 append 方法
self.append_text.connect(self.widget.append)
def emit(self, record):
"""
处理日志记录,将其格式化并通过信号发送到 QTextEdit。
"""
msg = self.format(record)
self.append_text.emit(msg)
def setup_logging(text_edit_widget: QTextEdit):
"""
配置全局 logging使其输出到控制台和指定的 QTextEdit 控件。
"""
root_logger = logging.getLogger()
# 设置日志级别,可以根据需要调整 (DEBUG, INFO, WARNING, ERROR, CRITICAL)
root_logger.setLevel(logging.DEBUG)
# 清除现有的处理器,防止重复输出(如果多次调用此函数)
for handler in root_logger.handlers[:]:
root_logger.removeHandler(handler)
# 1. 控制台处理器 (可选,用于调试)
console_handler = logging.StreamHandler()
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
console_handler.setFormatter(formatter)
root_logger.addHandler(console_handler)
# 2. QTextEdit 处理器
text_edit_handler = QTextEditLogger(text_edit_widget)
text_edit_handler.setFormatter(formatter)
root_logger.addHandler(text_edit_handler)
return root_logger
# 获取一个全局的 logger 实例,方便其他模块使用
logger = logging.getLogger(__name__)