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.html

flask的日志記錄需要用到python標准庫logging的支持。

最簡單示例:

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中內容為:

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中

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

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

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


高級一些的示例:

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中內容為:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM