Files
compile/util/generic/log.py
2025-07-07 14:12:53 +12:00

37 lines
1.2 KiB
Python

from dataclasses import dataclass
from logging.handlers import RotatingFileHandler
from enum import IntEnum
from typing import Optional
import logging
@dataclass
class Log:
class Level(IntEnum):
CRITICAL = 50
FATAL = CRITICAL
ERROR = 40
WARNING = 30
WARN = WARNING
INFO = 20
DEBUG = 10
NOTSET = 0
name: str
level: Level
file: Optional[str] = None
format: str = '[%(name)s] %(asctime)s - %(levelname)s - %(message)s'
date_format: str = '%Y-%m-%d %H:%M:%S'
def create_logger(self):
logger = logging.getLogger(self.name)
logger.setLevel(self.level)
formatter = logging.Formatter(self.format, self.date_format)
self._add_handler(logger, logging.StreamHandler(), formatter)
if self.file:
self._add_handler(logger, RotatingFileHandler(self.file, maxBytes=1000000, backupCount=3), formatter)
return logger
def _add_handler(self, logger: logging.Logger, handler: logging.Handler, formatter: logging.Formatter):
handler.setLevel(self.level)
handler.setFormatter(formatter)
logger.addHandler(handler)