#python #python-3.x #apache #flask #mod-wsgi
Вопрос:
У меня есть несколько api, созданных с помощью flask, размещенных в apache(RHEL 8) с mod_wsgi3.9, каждый api в виде собственного файла журнала внутри каждого проекта в /var/www/apiXXXX/журналы и виртуальная среда, но, как ни странно, записи журнала записываются в соответствующий файл журнала и случайным образом записываются в файлы журналов разных api. Структура папок api, которую я использую, такова:
- /var/www/apiXXXX
- папка env
- папка api
- папка журналов
- __init __.py
- logcfg.py
- apiXXXX.wsgi
- 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()
- 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']
}
}
}
- __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
- 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
Я попробовал несколько вещей, например, прокомментировать группу приложений и процесс демона, но я все еще получаю странное общее поведение для файлов журнала. Любой указатель был бы очень признателен.