add log
This commit is contained in:
@@ -130,6 +130,10 @@ class LoggingConfig(BaseModel):
|
||||
default=5,
|
||||
description="Количество резервных копий логов"
|
||||
)
|
||||
log_can_messages: bool = Field(
|
||||
default=False,
|
||||
description="Логировать каждое CAN сообщение на INFO уровне (может быть очень много логов)"
|
||||
)
|
||||
|
||||
|
||||
class GeneralConfig(BaseModel):
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user