Python에서 logging을 사용하여 Flask에 logid를 추가하는 방법

우리는 문제 포지셔닝을 위해 로그에logid를 추가하여 요청한 상하문에 연결하는 것을 흔히 볼 수 있습니다.이것은 두 가지 문제와 관련된다.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가 필요하기 때문에 uid를 간단하게 사용합니다.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를 추가하는지에 대한 자료는 저희 다른 관련 글을 주목해 주십시오!

좋은 웹페이지 즐겨찾기