Ведение журнала отключает вывод терминала фляги

У меня есть фляга app.py, внутри приложения у меня есть скрипт write_to_db.py. Я добавил журналирование в универсальный декоратор, и теперь flask не выводит никаких журналов на терминал, а мой отладчик VS Code не работает.

Когда я просматриваю файл error.log, я вижу только основной вывод, например:

Работает на http://127.0.0.1:7900/ (для выхода нажмите CTRL+C)

import logging

logging.basicConfig(filename='eror.log', level=os.environ.get("LOGLEVEL", "CRITICAL"))

def catch_all_decorator(f):
    def wrapper(*args, **kwargs):
        try:
            f(*args, **kwargs)
            return "LOADED"
        except Exception as e:
            logging.info(e)
            logging.exception("STACK TRACE")
            return "FAIL"

Мне нужно регистрировать данные трассировки стека и по-прежнему видеть их в терминале.


person Lev    schedule 13.05.2019    source источник


Ответы (1)


Вы перезаписали обработчик STDOUT по умолчанию с помощью logging.basicConfig(filename='eror.log', level=os.environ.get("LOGLEVEL", "CRITICAL")).

Running on http://127.0.0.1:7900/ (Press CTRL+C to quit) - вы видите это, потому что на самом деле это вывод "print()", а не вывод журнала.

Вот попробуйте это: logging.basicConfig(level=os.environ.get("LOGLEVEL", "CRITICAL"), handlers=[logging.FileHandler("error.log"), logging.StreamHandler()])

person andreygold    schedule 13.05.2019
comment
Я пробовал это, но он не регистрируется на консоли, если я не установил уровень = os.environ.get(LOGLEVEL, CRITICAL) LOGLEVEL в DEBUG - person Lev; 13.05.2019
comment
Ваши журналы настроены на вход на уровне INFO logging.info(e). Когда вы используете os.environ.get("LOGLEVEL", "CRITICAL") LOGLEVEL, вероятно, возвращается как None, а затем получает CRITICAL значение (потому что вы его установили). - person andreygold; 14.05.2019