Flask使用日誌記錄到文件示例

https://www.polarxiong.com/archives/Flask%E4%BD%BF%E7%94%A8%E6%97%A5%E5%BF%97%E8%AE%B0%E5%BD%95%E5%88%B0%E6%96%87%E4%BB%B6%E7%A4%BA%E4%BE%8B.htmlhtml

flask的日誌記錄須要用到python標準庫logging的支持。python

最簡單示例:flask

Python
from flask import Flask import logging app = Flask(__name__) @app.route('/') def root(): app.logger.info('info log') app.logger.warning('warning log') return 'hello' if __name__ == '__main__': app.debug = True handler = logging.FileHandler('flask.log') app.logger.addHandler(handler) app.run()

記錄到flask.log中內容爲:app

info log
warning log

Python
handler = logging.FileHandler('flask.log')

即建立一個log handler,比較經常使用的有FileHandlerRotatingHandler,其中FileHandler函數原型爲函數

Python
class logging.FileHandler(filename,mode='a',encoding=None,delay=False)
Python
app.logger.addHandler(handler)

即將此handler加入到此app中spa

Python
app.logger.info('info log')

即以INFO級別將'info log'寫入到日誌中。debug

logging的級別主要有NOTSETDEBUGINFOWARNINGERRORCRITICAL,挺容易理解的。日誌


高級一些的示例:code

Python
from flask import Flask import logging app = Flask(__name__) @app.route('/') def root(): app.logger.info('info log') app.logger.warning('warning log') return 'hello' if __name__ == '__main__': app.debug = True handler = logging.FileHandler('flask.log', encoding='UTF-8') handler.setLevel(logging.DEBUG) logging_format = logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s') handler.setFormatter(logging_format) app.logger.addHandler(handler) app.run()

記錄到flask.log中內容爲:orm

2015-08-29 10:12:48,004 - INFO - test.py - root - 9 - info log
2015-08-29 10:12:48,004 - WARNING - test.py - root - 10 - warning log
Python
handler.setLevel(logging.DEBUG)

即設置日誌記錄最低級別爲DEBUG,低於DEBUG級別的日誌記錄會被忽略,不設置setLevel()則默認爲NOTSET級別。

Python
logging_format = logging.Formatter( '%(asctime)s - %(levelname)s - %(filename)s - %(funcName)s - %(lineno)s - %(message)s') handler.setFormatter(logging_format)

這兩句用來控制日誌記錄格式,效果如上述記錄內容;在Python參考文檔中有更詳細的說明,這裏簡單介紹一下:

  • %(asctime)s 即日誌記錄時間,精確到毫秒
  • %(levelname)s 即此條日誌級別
  • %(filename)s 即觸發日誌記錄的python文件名
  • %(funcName)s 即觸發日誌記錄的函數名
  • %(lineno)s 即觸發日誌記錄代碼的行號
  • %(message)s 這項即調用如app.logger.info('info log')中的參數,即message

注意:此示例來自Python 3.4.3 和Flask 0.10.1

相關文章
相關標籤/搜索