Странное поведение Mod_wsgi, колба, Python 3.9 с ведением журнала

#python #python-3.x #apache #flask #mod-wsgi

Вопрос:

У меня есть несколько api, созданных с помощью flask, размещенных в apache(RHEL 8) с mod_wsgi3.9, каждый api в виде собственного файла журнала внутри каждого проекта в /var/www/apiXXXX/журналы и виртуальная среда, но, как ни странно, записи журнала записываются в соответствующий файл журнала и случайным образом записываются в файлы журналов разных api. Структура папок api, которую я использую, такова:

  1. /var/www/apiXXXX
    • папка env
    • папка api
      • папка журналов
      • __init __.py
      • logcfg.py
    • apiXXXX.wsgi
  2. apiXXXX.wsgi
 import sys
from os import path

wsgiPath = path.join(path.dirname(path.abspath(__file__)))
sys.path.insert(0, wsgiPath)

activate_this = path.join(wsgiPath,'env/bin/activate_this.py')
with open(activate_this) as file_:
    exec(file_.read(), dict(__file__=activate_this))
    
from dotenv import load_dotenv
load_dotenv(path.join(wsgiPath,'.env'))

from apiXXXX import create_app

application = create_app(wsgiPath)
application.app_context().push()

if __name__ == "__main__":
    application.run()
 
  1. logcfg.py(технически одинаково для каждого api)
 import os

CONST_DEVLOG = 'logs/devLog.log'
CONST_PRODLOG = 'logs/prodLog.log'


class logConfig:
    def __init__(self, path = None):
        if path:
            devlog = os.path.join(path, CONST_DEVLOG)
            prodlog = os.path.join(path, CONST_PRODLOG)
        else:
            devlog = CONST_DEVLOG
            prodlog = CONST_PRODLOG
        self.logConfig = {
    'disable_existing_loggers': True, 
    'version': 1, 
    'formatters': {'default': {
        'format': '[%(asctime)s] %(levelname)s in %(module)s: %(message)s', 
    }}, 
    'handlers': {'prdlogfile': {
        'class': 'logging.handlers.TimedRotatingFileHandler',        
        'formatter': 'default', 
        'filename':prodlog, 
        'when': 'midnight', 
        'interval': 1, 
        'backupCount': 20, 
        'encoding': 'utf-8', 
    }, 'devlogfile': {
        'class': 'logging.handlers.TimedRotatingFileHandler',        
        'formatter': 'default', 
        'filename':devlog, 
        'when': 'midnight', 
        'interval': 2, 
        'backupCount': 5, 
        'encoding': 'utf-8', 
    }}, 
    'loggers':{ 
        'devlog': {       
            'level': 'DEBUG',   
            'handlers': ['devlogfile']
        }, 
        'prodlog': {   
            'level': 'INFO',      
            'handlers': ['prdlogfile']
        }
    }
}
 
  1. __init __.py(technically the same for each api)
 imports

def create_app(auxWsgiDir = None):
    """ 
    app = Flask(__name__)     
    ...
    #Here I assign the corresponding environment log handler 
    if app.config["ENV"] == 'qa' or os.getenv('FLASK_ENV') == 'qa':
        cfg = QAConfig
        app.logger = logging.getLogger("devlog")        
    if app.config["ENV"] == "development" or os.getenv('FLASK_ENV') == 'development' or os.getenv('FLASK_ENV') is None:
        cfg = DevelopmentConfig
        app.logger = logging.getLogger("devlog")      
    if os.getenv('FLASK_ENV') == 'production':        
        cfg = ProductionConfig
        app.logger = logging.getLogger("prodlog")     
    ...
    return app
 
  1. apiXXXX.conf
         WSGIDaemonProcess apiXXXX
        WSGIProcessGroup apiXXXX
        #WSGIApplicationGroup %{GLOBAL}
        WSGIPassAuthorization On
        WSGIScriptAlias /apiXXXX /var/www/apiXXXX/apiXXXX.wsgi

        <Directory /var/www/apiXXXX>
                Options FollowSymLinks
                AllowOverride None
                Require all granted
        </Directory>

        LogLevel info
        CustomLog logs/apiXXXX-access.log combined
 

Я попробовал несколько вещей, например, прокомментировать группу приложений и процесс демона, но я все еще получаю странное общее поведение для файлов журнала. Любой указатель был бы очень признателен.