亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python如何使用logging為Flask增加logid

 更新時間:2021年03月30日 14:23:06   作者:yaozhen  
這篇文章主要介紹了Python如何使用logging為Flask增加logid,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

我們?yōu)榱藛栴}定位,常見做法是在日志中加入 logid,用于關(guān)聯(lián)一個請求的上下文。這就涉及兩個問題:1. logid 這個“全局”變量如何保存?zhèn)鬟f。2. 如何讓打印日志的時候自動帶上 logid(畢竟不能每個打日志的地方都手動傳入)

logid保存與傳遞

傳統(tǒng)做法就是講 logid 保存在 threading.local 里面,一個線程里都是一樣的值。在 before_app_request 就生成好,logid并放進(jìn)去。

import threading
 
from blueprint.hooks import hooks
 
thread_local = threading.local()
app = Flask()
app.thread_local = thread_local
import uuid
 
from flask import Blueprint
from flask import current_app as app
 
hooks = Blueprint('hooks', __name__)
 
@hooks.before_app_request
def before_request():
    """
    處理請求之前的鉤子
    :return:
    """
    # 生成logid
    app.thread_local.logid = uuid.uuid1().time

因?yàn)樾枰粋€數(shù)字的 logid 所以簡單使用 uuid.uuid1().time 一般并發(fā)完全夠了,不會重復(fù)且趨勢遞增(看logid就能知道請求的早晚)。

打印日志自動帶上logid

這個就是 Python 日志庫自帶的功能了,可以使用 Filter 來實(shí)現(xiàn)這個需求。

import logging
 
# https://docs.python.org/3/library/logging.html#logrecord-attributes
log_format = "%(asctime)s %(levelname)s [%(threadName)s-%(thread)d] %(logid)s %(filename)s:%(lineno)d %(message)s"
file_handler = logging.FileHandler(file_name)
logger = logging.getLogger()
logid_filter = ContextFilter()
file_handler.addFilter(logid_filter)
file_handler.setFormatter(logging.Formatter(log_format))
logger.addHandler(file_handler)
 
class ContextFilter(logging.Filter):
    """
    logging Filter
    """
 
    def filter(self, record):
        """
        threading local 獲取logid
        :param record:
        :return:
        """
        log_id = thread_local.logid if hasattr(thread_local, 'logid') else '-'
        record.logid = log_id
 
        return True

log_format 中我們用了很多系統(tǒng)自帶的占位符,但 %(logid)s 默認(rèn)沒有的。每條日志打印輸出前都會過 Filter,利用此特征我們就可以把 record.logid 賦值上,最終打印出來的時候就有 logid 了。

雖然最終實(shí)現(xiàn)了,但因?yàn)槭峭ㄓ没桨?,所以有些?fù)雜了。其實(shí)官方教程中介紹了一種更加簡單的方式:injecting-request-information,看來沒事還得多看看官方文檔。

以上就是Python如何使用logging為Flask增加logid的詳細(xì)內(nèi)容,更多關(guān)于Python為Flask增加logid的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Pytorch實(shí)驗(yàn)常用代碼段匯總

    Pytorch實(shí)驗(yàn)常用代碼段匯總

    這篇文章主要介紹了Pytorch實(shí)驗(yàn)常用代碼段匯總,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • python3使用flask編寫注冊post接口的方法

    python3使用flask編寫注冊post接口的方法

    今天小編就為大家分享一篇python3使用flask編寫注冊post接口的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • python快速進(jìn)階利用Tkinter定制一個信息提示框

    python快速進(jìn)階利用Tkinter定制一個信息提示框

    這篇文章主要介紹了python快速進(jìn)階利用Tkinter定制一個信息提示框,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • Python numpy中矩陣的基本用法匯總

    Python numpy中矩陣的基本用法匯總

    這篇文章主要給大家介紹了關(guān)于Python numpy中矩陣的基本用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-02-02
  • matplotlib源碼解析標(biāo)題實(shí)現(xiàn)(窗口標(biāo)題,標(biāo)題,子圖標(biāo)題不同之間的差異)

    matplotlib源碼解析標(biāo)題實(shí)現(xiàn)(窗口標(biāo)題,標(biāo)題,子圖標(biāo)題不同之間的差異)

    這篇文章主要介紹了matplotlib源碼解析標(biāo)題實(shí)現(xiàn)(窗口標(biāo)題,標(biāo)題,子圖標(biāo)題不同之間的差異),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • Python Django框架單元測試之文件上傳測試示例

    Python Django框架單元測試之文件上傳測試示例

    這篇文章主要介紹了Python Django框架單元測試之文件上傳測試,結(jié)合實(shí)例形式分析了Django框架單元測試中文件上傳測試的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2019-05-05
  • Python提取PDF指定內(nèi)容并生成新文件

    Python提取PDF指定內(nèi)容并生成新文件

    本文為你展示,如何用Python把許多PDF文件的文本內(nèi)容批量提取出來,并且整理存儲到數(shù)據(jù)框中,以便于后續(xù)的數(shù)據(jù)分析。感興趣的可以了解一下
    2021-06-06
  • 基于Python數(shù)據(jù)分析之pandas統(tǒng)計分析

    基于Python數(shù)據(jù)分析之pandas統(tǒng)計分析

    這篇文章主要介紹了基于Python數(shù)據(jù)分析之pandas統(tǒng)計分析,具有很好對參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-03-03
  • linux下python使用sendmail發(fā)送郵件

    linux下python使用sendmail發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了linux下python使用sendmail發(fā)送郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • python中networkx函數(shù)的具體使用

    python中networkx函數(shù)的具體使用

    本文主要介紹了python中networkx函數(shù)的具體使用,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02

最新評論