Я хотел бы создать на основе времени BufferingHandler
.В настоящее время BufferingHandler
основан на capacity
, что означает, что он будет сбрасывать записи только при достижении этого capacity
, как видно из исходного кода :
class BufferingHandler(logging.Handler):
def __init__(self, capacity):
logging.Handler.__init__(self)
self.capacity = capacity
self.buffer = []
def shouldFlush(self, record):
return (len(self.buffer) >= self.capacity)
def emit(self, record):
self.buffer.append(record)
if self.shouldFlush(record):
self.flush()
def flush(self):
self.acquire()
try:
self.buffer = []
finally:
self.release()
...
Я попробовал:
class TimeBasedBufferingHandler(BufferingHandler):
def __init__(self, capacity=10, delta=60):
BufferingHandler.__init__(self)
self.capacity = capacity
self.delta = delta # in seconds (as time.time())
def shouldFlush(self, record):
is_full = len(self.buffer) >= self.capacity
is_old = (record.created - self.buffer[0].created) >= self.delta
return is_full or is_old
Проблема в моем TimeBasedBufferingHandler
заключается в том, что если после последней записи не было получено ни одной записи и shouldFlush
не вернул True
, некоторые журналы будуточень долго в ловушке в буфере, а это не то, что я хочу.Я все еще хочу выпустить журналы через некоторое время (например, delta
), даже если не было получено ни одной записи для запуска функции emit
.
Как я могу это сделать?