TimedRotatingFileHandler (ведение журнала) хорошо работает с Flask, но создает проблемы при запуске того же приложения с Gunicorn

#python #flask #gunicorn

#python #flask #gunicorn

Вопрос:

Несколько файлов обновляются в случайном (не полном) порядке при выполнении одного и того же приложения flask с помощью gunicorn. как убедиться, что сгенерированные зарегистрированные операторы (TimedRotatingFileHandler) находятся в последовательном порядке и в любой момент времени обновляется только один файл.

  1. python app.py => Приложение Flask
  2. python trigger.py => отправляет 120 запросов, используемых для тестирования.

app.py

 from flask import Flask
from logio import logger
import time

app=Flask(__name__)

@app.route('/test/<id>', methods=['GET'])
def test(id):
    # for i in range(2):
    time.sleep(1)
    logger.info(f"{id}")
    return(f"hello_{id}")

if __name__=='__main__':
    app.run('0.0.0.0', 8080, debug=True, use_reloader=True)
 

logio.py

 import logging
from logging.handlers import RotatingFileHandler,TimedRotatingFileHandler

logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
#handler = RotatingFileHandler('/root/logs/default.log', maxBytes=10, backupCount=1)
handler = TimedRotatingFileHandler('config_files_test_flask.log', when='S', interval=30, backupCount=5)
FORMATTER = logging.Formatter("%(asctime)s — %(name)s — %(levelname)s — %(message)s")
handler.setFormatter(FORMATTER)
logger.addHandler(handler)
# application.logger.handlers = logger.handlers
# application.logger.setLevel(logging.INFO)
 

trigger.py

 import requests

def caller(param):
    resp=requests.get(f'http://127.0.0.1:8080/test/{param}')
    print(resp.text)

for i in range(120):
    caller(i)
 

Наблюдения

  1. Сгенерировано 5 файлов (1 config_files_test_flask.log 4 повернутых).
  2. Все файлы генерируются с одинаковым интервалом.
  3. 0-119, данные в журналах в последовательном порядке.

Теперь тот же файл выполняется с помощью gunicorn,

gunicorn --config config.py --log-config logging.conf app:app

Рабочие: 10, остальные параметры взяты из следующих файлов.

https://github.com/benoitc/gunicorn/blob/dc7dc14229cce9c949399bb8a0c73863f9470932/examples/logging.conf

https://github.com/benoitc/gunicorn/blob/dc7dc14229cce9c949399bb8a0c73863f9470932/examples/example_config.py

Наблюдения

  1. Сгенерировано 6 файлов (1 config_files_test_gunicorn.log 5 повернутых).
  2. Сгенерированные файлы находятся не через равные промежутки времени.
  3. Числа до 74 отсутствуют ни в одном из файлов, журналы содержат только 75-119.
  4. 75-119 зарегистрированных чисел не в порядке, не могу сказать, что они полностью случайны
 2021-12-10 15:09:35,745 — logio — INFO — 84
2021-12-10 15:09:36,751 — logio — INFO — 85
2021-12-10 15:09:37,756 — logio — INFO — 86
2021-12-10 15:09:41,782 — logio — INFO — 90
2021-12-10 15:10:01,891 — logio — INFO — 110
2021-12-10 15:10:02,897 — logio — INFO — 111
2021-12-10 15:10:03,903 — logio — INFO — 112
2021-12-10 15:10:04,908 — logio — INFO — 113