From 7c2b9fb3f44ef30f8ad77bcecb964e76afcac4a1 Mon Sep 17 00:00:00 2001 From: Finn Stutzenstein Date: Wed, 21 Oct 2026 08:21:07 +0000 Subject: [PATCH] Refactor logging and drop deprecated FLASK_ENV Move logging setup into max/log.py. The file handler is only used outside debug mode and its directory is configurable via LOG_DIR. FLASK_ENV is deprecated in Flask; debug mode is now controlled via FLASK_DEBUG. Co-Authored-By: Claude Opus 5.5 --- .devcontainer/compose.yml | 2 -- .gitignore | 1 + Dockerfile | 1 - max/app.py | 38 +------------------------------------- max/log.py | 38 ++++++++++++++++++++++++++++++++++++++ 5 files changed, 40 insertions(+), 40 deletions(-) create mode 100644 max/log.py diff --git a/.devcontainer/compose.yml b/.devcontainer/compose.yml index 50f2a47..e45a716 100644 --- a/.devcontainer/compose.yml +++ b/.devcontainer/compose.yml @@ -9,8 +9,6 @@ services: - home:/home/dev environment: - PYTHONPATH=/workspaces/max - - FLASK_APP=max.app - - FLASK_ENV=development - PGSQL_HOST=postgresql - PGSQL_PORT=5432 - PGSQL_USER=max diff --git a/.gitignore b/.gitignore index 0d20b64..0f55f8d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.pyc +log/ diff --git a/Dockerfile b/Dockerfile index 6eba631..9ae7378 100644 --- a/Dockerfile +++ b/Dockerfile @@ -12,7 +12,6 @@ RUN mkdir log ENV PYTHONPATH=/app/ ENV FLASK_APP=max.app -ENV FLASK_ENV=production COPY max/ ./max COPY scripts/entrypoint.sh . diff --git a/max/app.py b/max/app.py index d7069f7..89bf4bf 100644 --- a/max/app.py +++ b/max/app.py @@ -1,8 +1,5 @@ import base64 -import logging import os -import sys -from logging.config import dictConfig from flask import Flask from werkzeug.routing import Rule as WerkzeugRule @@ -11,6 +8,7 @@ from .auth import AuthMiddleware, init as init_auth from .cli import register_cli from .csrf import CsrfMiddleware from .db import database +from .log import init_logging from .middlewares import ( ExceptionMiddleware, I18NMiddleware, @@ -27,40 +25,6 @@ class Rule(WerkzeugRule): super().__init__(*args, **kwargs) # do not set methods -def init_logging(app): - dictConfig( - { - "version": 1, - "formatters": { - "default": {"format": "[%(asctime)s] [%(levelname)s]: %(message)s"} - }, - "handlers": { - "wsgi": { - "class": "logging.StreamHandler", - "stream": "ext://flask.logging.wsgi_errors_stream", - "formatter": "default", - }, - "stdout": { - "class": "logging.StreamHandler", - "stream": sys.stdout, - "formatter": "default", - }, - "file": { - "class": "logging.handlers.RotatingFileHandler", - "filename": "/app/log/max.log", - "formatter": "default", - "maxBytes": 1024 * 1024, - "backupCount": 5, - }, - }, - "root": {"level": "INFO", "handlers": ["stdout", "file"]}, - "gunicorn": {"level": "INFO", "handlers": ["stdout", "file"]}, - } - ) - logger = logging.getLogger(app.name) - logger.setLevel(logging.DEBUG if app.debug else logging.INFO) - - def main(): app = Flask(__name__) init_logging(app) diff --git a/max/log.py b/max/log.py new file mode 100644 index 0000000..53dbb3e --- /dev/null +++ b/max/log.py @@ -0,0 +1,38 @@ +import logging +import os +import sys +from logging.config import dictConfig + + +def init_logging(app): + handlers = { + "stdout": { + "class": "logging.StreamHandler", + "stream": sys.stdout, + "formatter": "default", + }, + } + active_handlers = ["stdout"] + if not app.debug: + handlers["file"] = { + "class": "logging.handlers.RotatingFileHandler", + "filename": os.path.join(os.environ.get("LOG_DIR", "/app/log"), "max.log"), + "formatter": "default", + "maxBytes": 1024 * 1024, + "backupCount": 5, + } + active_handlers.append("file") + + dictConfig( + { + "version": 1, + "formatters": { + "default": {"format": "[%(asctime)s] [%(levelname)s]: %(message)s"} + }, + "handlers": handlers, + "root": {"level": "INFO", "handlers": active_handlers}, + "gunicorn": {"level": "INFO", "handlers": active_handlers}, + } + ) + logger = logging.getLogger(app.name) + logger.setLevel(logging.DEBUG if app.debug else logging.INFO)