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,
description="Количество резервных копий логов"
)
log_can_messages: bool = Field(
default=False,
description="Логировать каждое CAN сообщение на INFO уровне (может быть очень много логов)"
)
class GeneralConfig(BaseModel):

View File

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

View File

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