feat: logging
This commit is contained in:
60
logger/builder.py
Normal file
60
logger/builder.py
Normal file
@ -0,0 +1,60 @@
|
||||
import logging
|
||||
import logging.config
|
||||
|
||||
from logger.constants import (
|
||||
LEVEL_NAME,
|
||||
BACKUP_COUNT,
|
||||
LOGS_FOLDER,
|
||||
MAX_LOG_FILE_SIZE_BYTES,
|
||||
)
|
||||
from logger.formatter import JsonFormatter
|
||||
from logger.gunzip_rotating_file_handler import GunZipRotatingFileHandler
|
||||
from logger.filters import LevelFilter, RequestIdFilter
|
||||
from core.singleton import Singleton
|
||||
|
||||
|
||||
class LoggerBuilder(metaclass=Singleton):
|
||||
def get_logger(self) -> logging.Logger:
|
||||
logger = logging.getLogger("crm")
|
||||
logger.setLevel(logging.DEBUG)
|
||||
logger.handlers.clear()
|
||||
self.set_handlers(logger)
|
||||
return logger
|
||||
|
||||
def set_handlers(self, logger: logging.Logger):
|
||||
LOGGER_LEVEL_STEP = 10
|
||||
|
||||
for level in range(logging.DEBUG, logging.CRITICAL + 1, LOGGER_LEVEL_STEP):
|
||||
logger.addHandler(self.create_rotating_file_handler(level))
|
||||
|
||||
logger.addHandler(self.create_console_handler())
|
||||
|
||||
@classmethod
|
||||
def create_rotating_file_handler(cls, level: int) -> GunZipRotatingFileHandler:
|
||||
folder = LOGS_FOLDER / LEVEL_NAME[level]
|
||||
folder.mkdir(parents=True, exist_ok=True)
|
||||
filename = LEVEL_NAME[level] + ".log"
|
||||
|
||||
file_handler = GunZipRotatingFileHandler(
|
||||
folder / filename,
|
||||
maxBytes=MAX_LOG_FILE_SIZE_BYTES,
|
||||
encoding="UTF-8",
|
||||
backupCount=BACKUP_COUNT[level],
|
||||
)
|
||||
|
||||
file_handler.addFilter(LevelFilter(level))
|
||||
file_handler.addFilter(RequestIdFilter())
|
||||
file_handler.setFormatter(JsonFormatter())
|
||||
|
||||
return file_handler
|
||||
|
||||
@classmethod
|
||||
def create_console_handler(cls) -> logging.StreamHandler:
|
||||
console_handler = logging.StreamHandler()
|
||||
console_handler.setLevel(logging.INFO)
|
||||
|
||||
console_handler.setFormatter(JsonFormatter())
|
||||
return console_handler
|
||||
|
||||
|
||||
logger_builder = LoggerBuilder()
|
||||
Reference in New Issue
Block a user