Как показать логи stdout в Heroku с помощью Flask? - PullRequest
0 голосов
/ 21 января 2019

В моем приложении Python 3.7.1 я использую Flask и развертываю его в Heroku, и все работает нормально, кроме входа в консоль Heroku. Я искал ответы и думал, что нашел некоторые ... но, увы, они не заканчивают распечатывать на Heroku Log Console. Когда я запускаю приложение локально, используя «py app.py», оно хорошо отображается.

В моем Procfile у меня есть следующее:

web: gunicorn app:app --log-level debug --log-file=-

В моем файле app.py у меня есть следующее:

if __name__ == '__main__':
    formatter = logging.Formatter( "%(asctime)s | %(pathname)s:%(lineno)d | %(funcName)s | %(levelname)s | %(message)s ")
    handler = RotatingFileHandler('logs/SlackBotApp.log', maxBytes=10000, backupCount=5)
    handler.setLevel(logging.DEBUG)
    handler.setFormatter(formatter)

    app.logger.addHandler(handler)
    app.logger.addHandler(logging.StreamHandler(stream=sys.stdout))
    app.logger.setLevel(logging.DEBUG)

    app.run()

Я звоню регистратору так:

app.logger.info("Url Requested: {}".format(url))

У меня такое чувство, что мне нужно внести изменения в мой Procfile, но я не уверен, что именно. Кто-нибудь может дать какие-либо рекомендации?

1 Ответ

0 голосов
/ 22 января 2019

Я решил это, добавив следующее в мой app.py:

if __name__ != '__main__':
    gunicorn_logger = logging.getLogger('gunicorn.error')
    app.logger.handlers = gunicorn_logger.handlers
    app.logger.setLevel(gunicorn_logger.level)

И настроить мой Procfile на:

web: gunicorn app:app --log-level=debug

Спасибо https://medium.com/@trstringer/logging-flask-and-gunicorn-the-manageable-way-2e6f0b8beb2f за ответ

...