import logging from logging.handlers import TimedRotatingFileHandler class QTextEditLogger(logging.Handler): def __init__(self, text_widget): super().__init__() self.widget = text_widget def emit(self, record): # 格式化日志信息 log_message = self.format(record) # 在主线程中更新 QTextEdit self.widget.append(log_message) class Logger: def __init__(self): self.logger_textEdit_info = logging.getLogger('info_logger') self.logger_textEdit_info.setLevel(logging.INFO) self.logger_textEdit_warning = logging.getLogger('warning_logger') self.logger_textEdit_warning.setLevel(logging.WARNING) self.logger_file_info = logging.getLogger('file_logger') self.logger_file_info.setLevel(logging.INFO) self.pre_message = '' def init_log(self,textEdit_info,textEdit_warning,file_path): text_edit_handler = QTextEditLogger(textEdit_info) formatter = logging.Formatter('%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') text_edit_handler.setFormatter(formatter) self.logger_textEdit_info.addHandler(text_edit_handler) text_edit_handler_warning = QTextEditLogger(textEdit_warning) formatter_warning = logging.Formatter('%(asctime)s - %(message)s', datefmt='%Y-%m-%d %H:%M:%S') text_edit_handler_warning.setFormatter(formatter_warning) self.logger_textEdit_warning.addHandler(text_edit_handler_warning) handler = TimedRotatingFileHandler(file_path, when="D", interval=1, backupCount=30) 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 log_message(self,level,message): if message != self.pre_message: self.pre_message = message else: return if level == logging.INFO: self.logger_textEdit_info.info(message) 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) if level == logging.WARNING: self.logger_file_info.warning(message) log = Logger()