婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Python如何使用logging為Flask增加logid

Python如何使用logging為Flask增加logid

熱門標簽:工廠智能電話機器人 江蘇客服外呼系統廠家 400電話申請服務商選什么 千陽自動外呼系統 原裝電話機器人 平頂山外呼系統免費 西藏智能外呼系統五星服務 清遠360地圖標注方法 在哪里辦理400電話號碼

我們為了問題定位,常見做法是在日志中加入 logid,用于關聯一個請求的上下文。這就涉及兩個問題:1. logid 這個“全局”變量如何保存傳遞。2. 如何讓打印日志的時候自動帶上 logid(畢竟不能每個打日志的地方都手動傳入)

logid保存與傳遞

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

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

因為需要一個數字的 logid 所以簡單使用 uuid.uuid1().time 一般并發完全夠了,不會重復且趨勢遞增(看logid就能知道請求的早晚)。

打印日志自動帶上logid

這個就是 Python 日志庫自帶的功能了,可以使用 Filter 來實現這個需求。

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 中我們用了很多系統自帶的占位符,但 %(logid)s 默認沒有的。每條日志打印輸出前都會過 Filter,利用此特征我們就可以把 record.logid 賦值上,最終打印出來的時候就有 logid 了。

雖然最終實現了,但因為是通用化方案,所以有些復雜了。其實官方教程中介紹了一種更加簡單的方式:injecting-request-information,看來沒事還得多看看官方文檔。

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

您可能感興趣的文章:
  • 解決python logging遇到的坑 日志重復打印問題
  • python 實現logging動態變更輸出日志文件名
  • python (logging) 日志按日期、大小回滾的操作
  • Python日志打印里logging.getLogger源碼分析詳解
  • python 日志模塊logging的使用場景及示例
  • Python的logging模塊基本用法
  • python 如何對logging日志封裝
  • Python logging自定義字段輸出及打印顏色
  • Python中logging日志的四個等級和使用
  • Python+logging輸出到屏幕將log日志寫入文件
  • Python logging模塊handlers用法詳解

標簽:隨州 天水 錦州 西安 日照 白城 股票 安慶

巨人網絡通訊聲明:本文標題《Python如何使用logging為Flask增加logid》,本文關鍵詞  Python,如何,使用,logging,為,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Python如何使用logging為Flask增加logid》相關的同類信息!
  • 本頁收集關于Python如何使用logging為Flask增加logid的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 恩平市| 伽师县| 邳州市| 双流县| 宝清县| 廊坊市| 丰城市| 阿图什市| 开阳县| 乌鲁木齐县| 林甸县| 哈尔滨市| 久治县| 新河县| 大庆市| 崇信县| 乌兰浩特市| 太和县| 夏津县| 清水县| 台江县| 饶河县| 满城县| 呼图壁县| 新河县| 南召县| 呼伦贝尔市| 庄浪县| 婺源县| 旬邑县| 安新县| 金沙县| 泽库县| 太仓市| 临清市| 万荣县| 巴里| 罗源县| 义马市| 怀远县| 江源县|