【Python】Flask日誌記錄:將日誌輸出到多個檔案、顯示行號、模組名稱、日誌級別等
阿新 • • 發佈:2020-12-15
技術標籤:DEVOPS
flask的日誌記錄需要用到python標準庫logging的支援。
# -*- coding: utf-8 -*- 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) # 設定日誌記錄最低級別為DEBUG,低於DEBUG級別的日誌記錄會被忽略,不設定setLevel()則預設為NOTSET級別。 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()
控制日誌記錄格式,效果如上述記錄內容;在Python參考文件中有更詳細的說明,這裡簡單介紹一下:
%(asctime)s 即日誌記錄時間,精確到毫秒
%(levelname)s 即此條日誌級別
%(filename)s 即觸發日誌記錄的python檔名
%(funcName)s 即觸發日誌記錄的函式名
%(lineno)s 即觸發日誌記錄程式碼的行號
%(message)s 這項即呼叫如app.logger.info(‘info log’)中的引數,即message
2019-11-08 23:18:51,769 - INFO - manager.py - root - 10 - info log
2019-11-08 23:18:51,770 - WARNING - manager.py - root - 11 - warning log
示例如下,產生log1.log和log2.log兩個日誌檔案。
同理,可以靈活地將不同模組中的日誌加以區分,輸出到不同檔案中。例如,views.py
from __future__ import absolute_import import logging def setup_logger(logger_name, log_file, level=logging.INFO): l = logging.getLogger(logger_name) formatter = logging.Formatter('%(asctime)s : %(message)s') fileHandler = logging.FileHandler(log_file, mode='w') fileHandler.setFormatter(formatter) streamHandler = logging.StreamHandler() streamHandler.setFormatter(formatter) l.setLevel(level) l.addHandler(fileHandler) l.addHandler(streamHandler) def main(): setup_logger('log1', r'log1.log') setup_logger('log2', r'log2.log') log1 = logging.getLogger('log1') log2 = logging.getLogger('log2') log1.info('Info for log 1!') log2.info('Info for log 2!') log1.error('Oh, no! Something went wrong!') if '__main__' == __name__: main()