🚑 update 修复日志记录闪退bug 增加移动至此 修复复位

This commit is contained in:
FrankCV2048
2025-01-02 22:44:01 +08:00
parent bfba1c3420
commit 0500db207a
5 changed files with 122 additions and 18 deletions

View File

@ -1,5 +1,10 @@
import logging
import queue
import threading
import time
from logging.handlers import TimedRotatingFileHandler
from PySide6.QtCore import Signal, QObject
class QTextEditLogger(logging.Handler):
@ -15,8 +20,12 @@ class QTextEditLogger(logging.Handler):
class Logger:
class Logger(QObject):
log_info_signal = Signal(str)
log_warning_signal = Signal(str)
log_error_signal = Signal(str)
def __init__(self):
super().__init__()
self.logger_textEdit_info = logging.getLogger('info_logger')
self.logger_textEdit_info.setLevel(logging.INFO)
self.logger_textEdit_warning = logging.getLogger('warning_logger')
@ -24,6 +33,10 @@ class Logger:
self.logger_file_info = logging.getLogger('file_logger')
self.logger_file_info.setLevel(logging.INFO)
self.pre_message = ''
self.lock = threading.Lock() # 创建锁
self.log_queue = queue.Queue()
self.logger_thread = threading.Thread(target=self._process_logs, daemon=True)
self.logger_thread.start()
def init_log(self,textEdit_info,textEdit_warning,file_path):
text_edit_handler = QTextEditLogger(textEdit_info)
@ -41,27 +54,45 @@ class Logger:
formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
handler.setFormatter(formatter)
self.logger_file_info.addHandler(handler)
def _process_logs(self):
while True:
time.sleep(0.1)
level, message = self.log_queue.get()
if level == logging.INFO:
self.log_info_signal.emit(message)
# self.logger_textEdit_info.info(message)
self.logger_file_info.info(message)
elif level == logging.ERROR:
# self.logger_textEdit_info.error(message)
self.logger_file_info.error(message)
# self.logger_textEdit_warning.error(message)
self.log_error_signal.emit(message)
elif level == logging.WARNING:
self.logger_file_info.warning(message)
self.log_warning_signal.emit(message)
def log_message(self,level,message):
self.log_queue.put((level, message))
return
try:
if message != self.pre_message:
with self.lock: # 确保线程安全
if message == self.pre_message:
return
self.pre_message = message
else:
return
if level == logging.INFO:
self.logger_textEdit_info.info(message)
#return
self.logger_file_info.info(message)
if level == logging.ERROR:
self.logger_textEdit_info.error(message)
self.logger_file_info.error(message)
self.logger_textEdit_warning.error(message)
self.logger_file_info.error(message)
if level == logging.WARNING:
#return
self.logger_file_info.warning(message)
except Exception as e: