Flask — как записать журналы werkzeug в файл журнала с помощью RotatingFileHandler?

Я нашел несколько похожих вопросов, но ничего, что напрямую касалось бы этого.

Я пытаюсь вывести все журналы Werkzeug в файл журнала. Я могу получить часть журнала для вывода в файл, но я не могу зафиксировать какие-либо ошибки или что-либо помимо основных строк маршрута/запроса.

Вот что у меня есть. Как я могу включить ВСЕ выходные данные из Werkzeug?

if __name__ == '__main__':
    configure_app(app)
    handler=RotatingFileHandler('server_werkzeug.log', maxBytes=10000000, backupCount=5)
    log = logging.getLogger('werkzeug')
    log.setLevel(logging.DEBUG)
    log.addHandler(handler)

person user797963    schedule 14.03.2017    source источник


Ответы (2)


Этот код отлично работает для ведения журнала. Что касается проблемы не логирования ошибок, то кажется, что нужно указать другие логгеры, кроме 'werkzeug'. Для ошибок трассировки во Flask вам нужен app.logger. И не забудьте установить уровень ПРЕДУПРЕЖДЕНИЕ.

import logging
import logging.handlers

app = Flask(__name__)

handler = logging.handlers.RotatingFileHandler(
        'log.txt',
        maxBytes=1024 * 1024)
logging.getLogger('werkzeug').setLevel(logging.DEBUG)
logging.getLogger('werkzeug').addHandler(handler)
app.logger.setLevel(logging.WARNING)
app.logger.addHandler(handler)

Вы также можете добавить другие регистраторы, если ваше приложение использует сторонние инструменты, такие как запросы к базе данных, задания cron и т. д.

logging.getLogger('apscheduler.scheduler').setLevel(logging.DEBUG)
logging.getLogger('apscheduler.scheduler').addHandler(handler)

Имя логгера можно найти в окне терминала:

INFO:werkzeug:127.0.0.1 - - [10/Mar/2018 15:41:15] "GET /file.js HTTP/1.1" 200 -
DEBUG:apscheduler.scheduler:Next wakeup is due at 2018-03-10 16:00:00+03:00 (in 1124.668881 seconds)
person Tim Nikitin    schedule 10.03.2018

Использование dictConfig является более расширяемым способом.

from logging.config import dictConfig

dictConfig({
    'version': 1,
    'handlers': {
        'file.handler': {
            'class': 'logging.handlers.RotatingFileHandler',
            'filename': 'server_werkzeug.log',
            'maxBytes': 10000000,
            'backupCount': 5,
            'level': 'DEBUG',
        },
    },
    'loggers': {
        'werkzeug': {
            'level': 'DEBUG',
            'handlers': ['file.handler'],
        },
    },
})
person Yan QiDong    schedule 21.05.2019