Исходный код core.configs.log
"""Настройка логгеров приложения и вывода внешних скриптов."""
import logging
from logging.handlers import RotatingFileHandler
from pathlib import Path
from pydantic import BaseModel
[документация]
class LoggingSettings(BaseModel):
"""Настройка логгеров: консоль плюс файл с ротацией."""
FORMAT: str = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
LEVEL: str = "INFO"
SCRIPT_LEVEL: str = "INFO"
FLOWGRAPH_LEVEL: str = "INFO"
DIRECTORY: str = "/var/lib/soniks-client/logs"
FILE_NAME: str = "client.log"
MAX_BYTES: int = 5 * 1024 * 1024 # 5 MB
BACKUP_COUNT: int = 5
ENCODING: str = "utf-8"
@property
def script_log_level(self) -> int:
return logging._nameToLevel[self.SCRIPT_LEVEL]
@property
def flowgraph_log_level(self) -> int:
return logging._nameToLevel[self.FLOWGRAPH_LEVEL]
def _create_handlers(
self,
formatter: logging.Formatter,
) -> tuple[logging.Handler, logging.Handler]:
Path(self.DIRECTORY).mkdir(parents=True, exist_ok=True)
console_handler = logging.StreamHandler()
console_handler.setFormatter(formatter)
file_handler = RotatingFileHandler(
filename=self._full_path,
maxBytes=self.MAX_BYTES,
backupCount=self.BACKUP_COUNT,
encoding=self.ENCODING,
)
file_handler.setFormatter(formatter)
return console_handler, file_handler
@property
def _full_path(self) -> Path:
return Path(self.DIRECTORY) / self.FILE_NAME