flask中的日誌使用方法
1 日誌應用場景
基於flask開發的應用程式通常有三類日誌,按照一次HTTP請求的處理順序依次為:
- url handler處理HTTP請求時列印的地址
- handler使用的類的方法列印的日誌
- 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:
- flask的app物件自身有一個logger物件,它是用來列印HTTP請求響應日誌,如果debug=True時還列印除錯資訊。這個日誌是flask框架的內部程式碼自己列印的,業務程式碼不需要關心
- 業務程式碼(包括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
flask中cookie,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 如何調用Unity中C#方法
都差不多 public title 接口 如何 1.原理就是通常在Lua框架中所說的,開放一個C#的web接口,或者叫做在Slua框架中註冊函數。2.作用在Lua中調用C#中的方法,這個是在做熱更新中很常用的一種方法,無論是slua,還是lua,都差不多、這
jquery中prop()方法和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
js中apply方法的使用
school int 學生 blog .sh sch arr 實現 優雅 1、對象的繼承,一般的做法是復制:Object.extend prototype.js的實現方式是: 1 Object.extend = function(destination, source)
JavaScript中getBoundingClientRect()方法詳解
script otto java chrome 頁面 支持 urn client fire getBoundingClientRect() 這個方法返回一個矩形對象,包含四個屬性:left、top、right和bottom。分別表示元素各邊與頁面上邊和左邊的距離。