使用gunicorn作為HTTP Server的時候,必須手動指派gunicorn的logger作為flask的logger handler,才能夠正常的進行DEBUG、WARN、INFO、WARN、CRIT等的log紀錄
在Server.py內加入如下程式碼,以將gunicorn的logger與flask App結合
if __name__ != '__main__':
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
指定logging以debug模式運作,修改Procfile內指令為:
web: gunicorn --log-level=debug Server:app
logger的使用方式:
# app.logger.[LEVEL]([LOG_MESSAGE])
app.logger.debug('this is a DEBUG message')
app.logger.info('this is an INFO message')
app.logger.warning('this is a WARNING message')
app.logger.error('this is an ERROR message')
app.logger.critical('this is a CRITICAL message')
在Server.py內加入一個新的route以測試log效果
@app.route('/')
def default_route():
"""Default route"""
app.logger.debug('this is a DEBUG message')
app.logger.info('this is an INFO message')
app.logger.warning('this is a WARNING message')
app.logger.error('this is an ERROR message')
app.logger.critical('this is a CRITICAL message')
return jsonify('that's a log of logs')
完成所有修改後將修改部署到heroku,測試功能吧
git add .
git commit -m "logging"
git push heroku main
heroku open
herolu logs -t
使用herolu logs 查詢logs,你應該可以看到如下輸出
2021-09-25T09:19:39.406667+00:00 app[web.1]: [2021-09-25 09:19:39 +0000] [7] [DEBUG] this is a DEBUG message
2021-09-25T09:19:39.406742+00:00 app[web.1]: [2021-09-25 09:19:39 +0000] [7] [INFO] this is an INFO message
2021-09-25T09:19:39.406816+00:00 app[web.1]: [2021-09-25 09:19:39 +0000] [7] [WARNING] this is a WARNING message
2021-09-25T09:19:39.406877+00:00 app[web.1]: [2021-09-25 09:19:39 +0000] [7] [ERROR] this is an ERROR message
2021-09-25T09:19:39.406935+00:00 app[web.1]: [2021-09-25 09:19:39 +0000] [7] [CRITICAL] this is a CRITICAL message
你可以通過Papertrail進行App的狀態監測與查看logs,可以省去自行撰寫logs分類,與命令列方式查閱不易的問題,並提供各種如錯誤通知的功能
heroku addons:create papertrail
heroku addons:open papertrail
你可以通過如上addons:open指令開啟模組的網頁,或是直接以如下方式從瀏覽器直接進入,將<app name>替換為你的heroku App名稱
https://addons-sso.heroku.com/apps/<app name>/addons/papertrail
今天補一點昨天沒有忘了補充的部分