feat: base flask x gunicorn server
Python Lint CI / ruff-format-check (push) Successful in 1m21s
Python Lint CI / ruff (push) Successful in 1m21s
Python Lint CI / ty (push) Successful in 1m29s

This commit is contained in:
2026-06-30 17:09:16 +02:00
parent e19a9cfdcc
commit 83c8e4415b
8 changed files with 299 additions and 46 deletions
+32 -1
View File
@@ -2,8 +2,11 @@ import enum
import logging
import typing
import gunicorn.config
import gunicorn.glogging
if typing.TYPE_CHECKING:
from .params import Parameters
from app.params import Parameters
class TermColor(enum.StrEnum):
@@ -57,6 +60,20 @@ class ColoredLoggingFormatter(logging.Formatter):
self.trace: bool = trace
super().__init__()
@classmethod
def flat_format(cls, level: int) -> str:
return (
cls.pre_format
+ cls.FORMAT_COLORS.get(
level,
TermColor.MAGENTA,
)
+ TermColor.BOLD
+ cls.level_format
+ TermColor.RESET
+ cls.post_format
)
@typing.override
def format(self, record: logging.LogRecord) -> str:
log_color: TermColor | str = self.FORMAT_COLORS.get(
@@ -75,6 +92,20 @@ class ColoredLoggingFormatter(logging.Formatter):
return formatter.format(record)
class GunicornLogger(gunicorn.glogging.Logger):
@typing.override
def __init__(self, cfg: gunicorn.config.Config) -> None:
super().__init__(cfg)
self._set_handler(
self.error_log, cfg.errorlog, ColoredLoggingFormatter(trace=False)
)
if cfg.accesslog is not None:
self._set_handler(
self.access_log, cfg.accesslog, ColoredLoggingFormatter(trace=False)
)
def setup_logs(params: Parameters) -> None:
stream_handler = logging.StreamHandler()
stream_handler.setFormatter(ColoredLoggingFormatter(trace=params.debug))