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,比較經常使用的有FileHandler
和RotatingHandler
,其中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
的級別主要有NOTSET
、DEBUG
、INFO
、WARNING
、ERROR
和CRITICAL
,挺容易理解的。日誌
高級一些的示例: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