添加日志过滤器, 降低相同日志输出频率

This commit is contained in:
haotian 2025-09-17 11:36:48 +08:00
parent cfc8f80954
commit e6a8571626
2 changed files with 36 additions and 0 deletions

View File

@ -12,6 +12,10 @@ from dataclasses import dataclass
from collections import deque
import yaml
from util.log_util import TimeBasedDuplicateFilter
try:
from ultralytics import YOLO
except ImportError:
@ -28,6 +32,9 @@ logging.basicConfig(
)
logger = logging.getLogger(__name__)
# 5为时间间隔,单位s. 5s内不会输出相同日志
logger.addFilter(TimeBasedDuplicateFilter(5))
@dataclass
class DetectionResult:
"""检测结果数据类"""

29
util/log_util.py Normal file
View File

@ -0,0 +1,29 @@
import logging
import time
from collections import defaultdict
class TimeBasedDuplicateFilter(logging.Filter):
"""
过滤 5 秒内的重复日志
"""
def __init__(self, interval=5):
super().__init__()
self.interval = interval # 时间间隔(秒)
self.last_log = defaultdict(dict) # 记录最近日志的时间 {logger_name: {msg: last_time}}
def filter(self, record):
current_time = time.time()
msg = record.getMessage()
logger_name = record.name
# 如果这条日志在 5 秒内已经记录过,则过滤掉
if (
logger_name in self.last_log
and msg in self.last_log[logger_name]
and (current_time - self.last_log[logger_name][msg]) < self.interval
):
return False # 不记录这条日志
# 更新最近日志时间
self.last_log[logger_name][msg] = current_time
return True # 记录这条日志