Files
Feeding_control_system/common/logging_service.py
2025-10-31 14:30:42 +08:00

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()