about summary refs log tree commit diff
path: root/gn_libs/logging.py
blob: 952d30f3f440d4a7af2e6df2a9d2200166c814a4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"""Generalised setup for logging for Genenetwork systems."""
import os
import logging

from flask import Flask

logging.basicConfig(
    encoding="utf-8",
    format="%(asctime)s%(filename)s:%(lineno)s%(levelname)s: %(message)s")


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."""
    root_logger = logging.getLogger()
    root_logger.setLevel(
        app.config.get("LOG_LEVEL", app.config.get("LOGLEVEL", "WARNING")))

    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 setup_modules_logging(app_logger: logging.Logger, modules: tuple[str, ...]):
    """Setup module-level loggers to the same log-level as the application."""
    loglevel = logging.getLevelName(app_logger.getEffectiveLevel())
    for module in modules:
        _logger = logging.getLogger(module)
        _logger.setLevel(loglevel)