🚑 update 修复日志记录闪退bug 增加移动至此 修复复位
This commit is contained in:
@ -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:
|
||||
|
||||
Reference in New Issue
Block a user