This commit is contained in:
2026-01-06 18:22:57 +03:00
parent 6400c9a58f
commit 62a71d298e
3 changed files with 35 additions and 14 deletions

View File

@@ -130,6 +130,10 @@ class LoggingConfig(BaseModel):
default=5, default=5,
description="Количество резервных копий логов" description="Количество резервных копий логов"
) )
log_can_messages: bool = Field(
default=False,
description="Логировать каждое CAN сообщение на INFO уровне (может быть очень много логов)"
)
class GeneralConfig(BaseModel): class GeneralConfig(BaseModel):

View File

@@ -19,16 +19,18 @@ logger = get_logger(__name__)
class MessageProcessor: class MessageProcessor:
"""Класс для обработки и сохранения CAN сообщений с асинхронной обработкой.""" """Класс для обработки и сохранения CAN сообщений с асинхронной обработкой."""
def __init__(self, queue_size: int = 10000): def __init__(self, queue_size: int = 10000, log_messages: bool = False):
""" """
Инициализация процессора сообщений. Инициализация процессора сообщений.
Args: Args:
queue_size: Максимальный размер очереди сообщений queue_size: Максимальный размер очереди сообщений
log_messages: Логировать каждое сообщение на INFO уровне (по умолчанию False)
""" """
self.logger = logger self.logger = logger
self.storage = None self.storage = None
self.influxdb_client = None self.influxdb_client = None
self.log_messages = log_messages
# Очередь для асинхронной обработки сообщений # Очередь для асинхронной обработки сообщений
self.message_queue: Queue[Tuple[str, can.Message]] = Queue(maxsize=queue_size) self.message_queue: Queue[Tuple[str, can.Message]] = Queue(maxsize=queue_size)
@@ -202,18 +204,31 @@ class MessageProcessor:
message: CAN сообщение message: CAN сообщение
""" """
try: try:
# Логируем только на DEBUG уровне (не блокируем) # Логируем сообщение в зависимости от настроек
# DEBUG логирование может быть отключено в production if self.log_messages:
self.logger.debug( # Логирование на INFO уровне (если включено)
"CAN message received", self.logger.info(
extra={ "CAN message",
"interface": interface, extra={
"can_id": hex(message.arbitration_id), "interface": interface,
"dlc": message.dlc, "can_id": hex(message.arbitration_id),
"data": message.data.hex() if message.data else "", "dlc": message.dlc,
"timestamp": message.timestamp "data": message.data.hex() if message.data else "",
} "timestamp": message.timestamp
) }
)
else:
# Логирование на DEBUG уровне (по умолчанию)
self.logger.debug(
"CAN message received",
extra={
"interface": interface,
"can_id": hex(message.arbitration_id),
"dlc": message.dlc,
"data": message.data.hex() if message.data else "",
"timestamp": message.timestamp
}
)
# Сохраняем в локальное хранилище (SQLite) # Сохраняем в локальное хранилище (SQLite)
self._save_to_storage(interface, message) self._save_to_storage(interface, message)

View File

@@ -178,7 +178,9 @@ class CANSniffer:
self.logger = get_logger(__name__) self.logger = get_logger(__name__)
# Инициализируем MessageProcessor для автоматической обработки сообщений # Инициализируем MessageProcessor для автоматической обработки сообщений
self.message_processor = MessageProcessor() # Используем настройку из конфигурации для логирования сообщений
log_messages = config.logging.log_can_messages
self.message_processor = MessageProcessor(log_messages=log_messages)
# Используем переданный callback или процессор по умолчанию # Используем переданный callback или процессор по умолчанию
if message_callback: if message_callback: