在平時開發(fā)中,會經(jīng)常使用logging模塊輸出一些信息,logging 模塊內(nèi)容了一些字段如: 行號,日志級別,時間,文件名,行號等等,可是我們有時候可能需要自己添加一些字段來進(jìn)行標(biāo)識如 request_id 而這些自定義字段是不能直接使用的,那如何實現(xiàn)呢?這時候我們就需要自定義 Handler來實現(xiàn)這個目標(biāo)。
import logging
def _get_request_id():
# 利用它來生成request_id
import flask_request_id
return flask_request_id.id
def get_logger():
# request_id 就是我們自己定義的新字段
format_str = '[%(asctime)s_%(levelname)s]_[%(filename)s:%(lineno)d]_[%(request_id)s]: %(message)s'
# request_id 的值就是從這個 extra 值中動態(tài)獲取的
extra = {"request_id": _get_request_id()}
loger = logging.getLogger(__name__)
stream = logging.StreamHandler()
format_ = logging.Formatter(format_str)
stream.setFormatter(format_)
loger.setLevel(logging.INFO)
loger.addHandler(stream)
loger = logging.LoggerAdapter(loger, extra)
return loger
為了使用方便我們可以將 request_id 放在flask的全局對象g中,這樣我們就可以在在請求的任何地方使用了。
from flask_request_id import RequestID
@app.before_request
def before_request():
# add request_id into global g object
g.request_id = flask_request_id.id
??????