1. 程式人生 > >flask中的日誌使用方法

flask中的日誌使用方法

1 日誌應用場景

基於flask開發的應用程式通常有三類日誌,按照一次HTTP請求的處理順序依次為:

  1. url handler處理HTTP請求時列印的地址
  2. handler使用的類的方法列印的日誌
  3. flask的web server列印的HTTP請求和響應日誌
@app.route('/')
def handler_home():
    logging.info('handler_home starts')
    u = Util()
    u.do_something()
    logging.info('handler_home ends')
    return 'hello world'
class Util(object): def do_something(self): logging.info('Util do_something') INFO: 07-09 17:42:26: _internal.py:87 * 10348 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit) INFO: 07-09 17:42:30: app.py:20 * 10348 handler_home starts INFO: 07-09 17:42:30: app.py:16 * 10348 Util do_something INFO: 07
-09 17:42:30: app.py:23 * 10348 handler_home ends INFO: 07-09 17:42:30: _internal.py:87 * 10348 127.0.0.1 - - [09/Jul/2016 17:42:30] "GET / HTTP/1

2 配置方法

在基於flask開發的應用中使用日誌需要初始化兩個logger:

  1. flask的app物件自身有一個logger物件,它是用來列印HTTP請求響應日誌,如果debug=True時還列印除錯資訊。這個日誌是flask框架的內部程式碼自己列印的,業務程式碼不需要關心
  2. 業務程式碼(包括handler以及自己寫的類中列印的日誌)使用logging模組的logger物件,通過logging.{warn,info,debug}等介面列印即可。位於單獨的py檔案中的類,import logging即可。

例:日誌handler為定時切割方式,flask和業務程式碼的日誌也可以分別列印到不同的檔案中。

import log
if __name__ == '__main__':
    log.init_log('./log/app') #初始化logging.logger
    log.init_log('./log/app', app.logger) #初始化app.logger

# log.py
import os
import logging
import logging.handlers

def init_log(log_path, logger=None, level=logging.INFO, when="D", backup=7,
             format="%(levelname)s: %(asctime)s: %(filename)s:%(lineno)d * %(thread)d %(message)s",
             datefmt="%m-%d %H:%M:%S"):
    """
    init_log - initialize log module

    Args:
      log_path      - Log file path prefix.
                      Log data will go to two files: log_path.log and log_path.log.wf
                      Any non-exist parent directories will be created automatically
      logger        - default using logging.getLogger()
      level         - msg above the level will be displayed
                      DEBUG < INFO < WARNING < ERROR < CRITICAL
                      the default value is logging.INFO
      when          - how to split the log file by time interval
                      'S' : Seconds
                      'M' : Minutes
                      'H' : Hours
                      'D' : Days
                      'W' : Week day
                      default value: 'D'
      format        - format of the log
                      default format:
                      %(levelname)s: %(asctime)s: %(filename)s:%(lineno)d * %(thread)d %(message)s
                      INFO: 12-09 18:02:42: log.py:40 * 139814749787872 HELLO WORLD
      backup        - how many backup file to keep
                      default value: 7

    Raises:
        OSError: fail to create log directories
        IOError: fail to open log file
    """
    formatter = logging.Formatter(format, datefmt)
    if not logger:
      logger = logging.getLogger()
    logger.setLevel(level)

    dir = os.path.dirname(log_path)
    if not os.path.isdir(dir):
        os.makedirs(dir)

    handler = logging.handlers.TimedRotatingFileHandler(log_path + ".log",
                                                        when=when,
                                                        backupCount=backup)
    handler.setLevel(level)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

    handler = logging.handlers.TimedRotatingFileHandler(log_path + ".log.wf",
                                                        when=when,
                                                        backupCount=backup)
    handler.setLevel(logging.WARNING)
    handler.setFormatter(formatter)
    logger.addHandler(handler)

參考

相關推薦

python web開發-flask日誌的使用

編程語言 Python Flask使用日誌記錄的方式:1. 初始化flask應用實例在flask中使用logger,需要初始化一個flask的應用app = Flask(__name__)2. 調用logger直接調用logger方法app.logger.info("my first logging"

flask日誌使用方法

1 日誌應用場景 基於flask開發的應用程式通常有三類日誌,按照一次HTTP請求的處理順序依次為: url handler處理HTTP請求時列印的地址 handler使用的類的方法列印的日誌 flask的web server列印的HTTP請求和響應日誌

flask xx.init_app(app)方法

oot lan line con 指定 ask ext 套路 name bootstrap = Bootstrap() mail = Mail() moment = Moment() db = SQLAlchemy() def create_app(conf

flaskcookie,session的儲存,呼叫,刪除 方法(程式碼demo)

# -*- encoding: utf-8 -*- # cookie,session的儲存,呼叫,刪除 from flask import Flask,make_response,request,session ret = Flask(__name__)

Tomcat 日誌(控制檯)中文亂碼解決方法

背景: windows系統以Linux指令碼啟動服務 問題 在Tomcat中有時輸出的日誌中文為亂碼,包括控制檯視窗和輸出日誌檔案中都為亂碼。 解決方案 JDK引用的設定 Java引用引數新增"-Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8" 將上面

flask開發個人部落格(40)—— Flask三種測試方法

一、單元測試並統計測試的覆蓋率 1.1 Flask中的單元測試         在之前的文章中介紹過在flask中進行單元測試的方法,目前我們的程式碼中存在下面的單元測試: classBasicTestCase(unittest.TestCase): def Set

flask日誌logging二》在flask使用日誌輸出

flask中app.logger是標準logging Logger。        例項:        app.logger.info('!!!!!!!!!!!!!!!!!!!!!!!!')     app.logger.debug('@@@@@@@@@@@@@@')

Python3 記錄日誌並輸出到 log 檔案方法(防止輸出中文亂碼)

# -*- coding: utf-8 -*- import logging.handlers LOG_FILE = r'tst.log' handler = logging.handlers.

svn日誌不展示解決方法記錄

authz 問題: 參數 使用 開啟 賬號 猜想 svnserve anon 一,問題:點擊svn查看日誌時不顯示。篩選時間顯示為1970 1,猜想可能沒有查看日誌權限 2,查看linux 下svn版本庫 confg 下三個配制文件 authz ,passwd ,svn

Unity SLua 如何調用UnityC#方法

都差不多 public title 接口 如何 1.原理就是通常在Lua框架中所說的,開放一個C#的web接口,或者叫做在Slua框架中註冊函數。2.作用在Lua中調用C#中的方法,這個是在做熱更新中很常用的一種方法,無論是slua,還是lua,都差不多、這

jqueryprop()方法和attr()方法的區別淺析

clas ttr over dex idt pro query selected accesskey jquery1.6中新加了一個方法prop(),一直沒用過它,官方解釋只有一句話:獲取在匹配的元素集中的第一個元素的屬性值。 大家都知道有的瀏覽器只要寫disabled,c

js方法

合並 一段 spl 刪除 元素 font 返回 splice ice Array數組操作  Array.slice() arrayObject.slice(start,end)//返回值:返回一個新的數組,包含從 start 到 end (不包括該元素)的 arra

JQuery$.ajax()方法參數詳解(轉載)

瀏覽器 object 服務器 字符串 false type: 要求為String類型的參數,請求方式(post或get)默認為get。註意其他http請求方法,例如put和 delete也可以使用,但僅部分瀏覽器支持。timeout: 要求為Number類型的參數,設置請求超時時

php靜態方法的使用

time ima 方法 cte count() turn font 應該 面向對象 靜態方法 (1)靜態方法不能訪問這個類中的普通屬性,因為那些屬性屬於一個對象,但可以訪問靜態屬性; (2)從當前類(不是子類)中訪問靜態方法或屬性,可以使用 self 關鍵字,self 指向

C#方法傳參與switch、if結構(4)

判斷 1.2 菱形 條件表達式 執行 代碼 輸出 分類 簡易 一、方法傳參的2種方式    1、按值傳遞       傳遞的是值的副本,值會更改但未保留,值最終並未更改     2、按引用傳遞(形參用ref關鍵字修飾)【P86頁】 傳遞的是地址,值會更改且保留,值最終更改

Iterator類方法next()如何用

find explain != itl mil void ash package args 這是一道比較簡單的詞典管理的題目,實現查詞,添加詞語,添加同義詞,查同義詞的功能,當然啦,用到Map(映射)! 1.這是JavaAPI文檔中對方法next()的簡單介紹,我遇到的問題

java方法

允許 多個 != 返回值 如果 系統底層 所在 格式 影響 方法的概念: 簡單的說方法就是完成特定功能的代碼塊 使用方法的好處: 降低程序的冗余度 , 便於後期維護 , 提高封裝性 方法的定義格式修飾符 返回值類型 方法名(數據類型 參數名1,數據類型 參數名2,.

數組方法

join() 第一個 方法 末尾 eve 第一個元素 unshift 返回 con push() 在數組末尾添加元素 pop() 刪除數組的最後一個元素 unshift() 在數組開頭添加元素 (最後加的在前面) shift() 刪除並返回數組第一個元素 delet

jsapply方法的使用

school int 學生 blog .sh sch arr 實現 優雅 1、對象的繼承,一般的做法是復制:Object.extend prototype.js的實現方式是: 1 Object.extend = function(destination, source)

JavaScriptgetBoundingClientRect()方法詳解

script otto java chrome 頁面 支持 urn client fire getBoundingClientRect() 這個方法返回一個矩形對象,包含四個屬性:left、top、right和bottom。分別表示元素各邊與頁面上邊和左邊的距離。