about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--uploader/__init__.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/uploader/__init__.py b/uploader/__init__.py
index 266495c..2d731af 100644
--- a/uploader/__init__.py
+++ b/uploader/__init__.py
@@ -1,5 +1,6 @@
 """The Quality-Control Web Application entry point"""
 import os
+import sys
 import logging
 from pathlib import Path
 
@@ -24,6 +25,33 @@ def override_settings_with_envvars(
         app.config[setting] = os.environ.get(setting) or app.config[setting]
 
 
+def __log_gunicorn__(app: Flask) -> Flask:
+    """Set up logging for the WSGI environment with GUnicorn"""
+    logger = logging.getLogger("gunicorn.error")
+    app.logger.handlers = logger.handlers
+    app.logger.setLevel(logger.level)
+    return app
+
+
+def __log_dev__(app: Flask) -> Flask:
+    """Set up logging for the development environment."""
+    stderr_handler = logging.StreamHandler(stream=sys.stderr)
+    app.logger.addHandler(stderr_handler)
+
+    root_logger = logging.getLogger()
+    root_logger.addHandler(stderr_handler)
+    root_logger.setLevel(app.config["LOG_LEVEL"])
+
+    return app
+
+
+def setup_logging(app: Flask) -> Flask:
+    """Set up logging for the application."""
+    software, *_version_and_comments = os.environ.get(
+        "SERVER_SOFTWARE", "").split('/')
+    return __log_gunicorn__(app) if bool(software) else __log_dev__(app)
+
+
 def create_app():
     """The application factory"""
     app = Flask(__name__)
@@ -42,6 +70,8 @@ def create_app():
             # Silently ignore secrets if the file does not exist.
             app.config.from_pyfile(secretsfile)
 
+    setup_logging(app)
+
     # setup jinja2 symbols
     app.add_template_global(lambda : request.url, name="request_url")
     app.add_template_global(authserver_authorise_uri)