85 lines
3.3 KiB
Python
85 lines
3.3 KiB
Python
import logging
|
|
import queue
|
|
import threading
|
|
import time
|
|
from logging.handlers import TimedRotatingFileHandler
|
|
from PySide6.QtCore import Signal, QObject
|
|
import os
|
|
|
|
|
|
|
|
# class QTextLogger(logging.Handler):
|
|
# def __init__(self):
|
|
# super().__init__()
|
|
|
|
# def emit(self, record):
|
|
# pass
|
|
|
|
|
|
class LoggingService(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')
|
|
# self.logger_textEdit_warning.setLevel(logging.WARNING)
|
|
self.logger_file_info = logging.getLogger('file_logger')
|
|
self.logger_file_info.setLevel(logging.INFO)
|
|
self.log_queue = queue.Queue()
|
|
self.logger_thread = threading.Thread(target=self._process_logs, daemon=True,name="util_log")
|
|
self.logger_thread.start()
|
|
|
|
def init_log(self,file_path):
|
|
# text_edit_handler = QTextLogger()
|
|
# 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 = QTextLogger()
|
|
# 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)
|
|
# 确保日志目录存在
|
|
log_dir = os.path.dirname(file_path)
|
|
if log_dir and not os.path.exists(log_dir):
|
|
os.makedirs(log_dir, exist_ok=True)
|
|
|
|
handler = TimedRotatingFileHandler(file_path, when='D', interval=1, backupCount=30,encoding='utf-8')
|
|
handler.suffix = "%Y-%m-%d"
|
|
formatter = logging.Formatter('%(asctime)s - %(levelname)s- %(message)s', datefmt='%Y-%m-%d %H:%M:%S')
|
|
handler.setLevel(logging.INFO)
|
|
handler.setFormatter(formatter)
|
|
self.logger_file_info.addHandler(handler)
|
|
|
|
# 添加错误专用日志文件
|
|
error_handler = TimedRotatingFileHandler(
|
|
file_path.replace('.log', '_error.log'),
|
|
when='D', interval=1, backupCount=30, encoding='utf-8')
|
|
error_handler.suffix = "%Y-%m-%d"
|
|
error_handler.setLevel(logging.ERROR) # 只处理错误级别
|
|
error_handler.setFormatter(formatter)
|
|
self.logger_file_info.addHandler(error_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_file_info.info(message)
|
|
elif level == logging.ERROR:
|
|
self.logger_file_info.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))
|
|
|
|
|
|
logging_service = LoggingService()
|