37 lines
1.2 KiB
Python
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) |