first commit
This commit is contained in:
54
logger_config.py
Normal file
54
logger_config.py
Normal file
@@ -0,0 +1,54 @@
|
||||
# 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__)
|
||||
Reference in New Issue
Block a user