Add logging sharing in bot channel
This commit is contained in:
parent
65da9a65de
commit
48a5fa2285
3 changed files with 38 additions and 6 deletions
|
|
@ -1,7 +1,27 @@
|
|||
from collections import deque
|
||||
from logging import handlers
|
||||
import logging
|
||||
from pathlib import Path
|
||||
import sys
|
||||
import time
|
||||
|
||||
|
||||
class MemoryHandler(logging.Handler):
|
||||
def __init__(self, capacity):
|
||||
"""
|
||||
Initialize the handler with the buffer size.
|
||||
"""
|
||||
logging.Handler.__init__(self)
|
||||
self.buffer: deque[logging.LogRecord] = deque(maxlen=capacity)
|
||||
self.last_update = time.time()
|
||||
|
||||
def emit(self, record: logging.LogRecord):
|
||||
self.buffer.append(record)
|
||||
self.last_update = time.time()
|
||||
|
||||
def close(self):
|
||||
self.buffer.clear()
|
||||
logging.Handler.close(self)
|
||||
|
||||
|
||||
class ConsoleColor:
|
||||
|
|
@ -34,19 +54,24 @@ class ColoredFormatter(logging.Formatter):
|
|||
return logging.Formatter.format(self, record)
|
||||
|
||||
|
||||
def create_logger(name: str, level: int, log_dir: Path | None = None, stdout=False) -> logging.Logger:
|
||||
def create_logger(name: str, level: int, buffer_capacity: int, log_dir: Path | None = None,
|
||||
stdout=False) -> tuple[logging.Logger, MemoryHandler]:
|
||||
logger = logging.getLogger(name)
|
||||
logger.setLevel(level)
|
||||
|
||||
log_formatter = logging.Formatter('%(asctime)s %(levelname)s : %(message)s')
|
||||
buffer_handler = MemoryHandler(buffer_capacity)
|
||||
buffer_handler.setFormatter(log_formatter)
|
||||
buffer_handler.setLevel(level)
|
||||
logger.addHandler(buffer_handler)
|
||||
|
||||
if log_dir is not None:
|
||||
log_dir.mkdir(parents=True, exist_ok=True)
|
||||
logger.setLevel(level)
|
||||
file_log_handler = handlers.RotatingFileHandler(
|
||||
log_dir / f'{name}.log',
|
||||
maxBytes=500000,
|
||||
backupCount=5)
|
||||
file_log_handler.setLevel(level)
|
||||
log_formatter = logging.Formatter('%(asctime)s %(levelname)s : %(message)s')
|
||||
file_log_handler.setFormatter(log_formatter)
|
||||
logger.addHandler(file_log_handler)
|
||||
|
||||
|
|
@ -57,4 +82,4 @@ def create_logger(name: str, level: int, log_dir: Path | None = None, stdout=Fal
|
|||
terminal_log_handler.setFormatter(colored_log_formatter)
|
||||
logger.addHandler(terminal_log_handler)
|
||||
|
||||
return logger
|
||||
return logger, buffer_handler
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue