11.26 优化日志管理

This commit is contained in:
zy123 2024-11-26 11:32:24 +08:00
parent 907f225049
commit ceaaf3c1c9
6 changed files with 64 additions and 33 deletions

View File

@ -7,11 +7,12 @@ import os
from flask_app.main.download import download_file from flask_app.main.download import download_file
from flask_app.general.post_processing import outer_post_processing from flask_app.general.post_processing import outer_post_processing
from flask_app.general.接口_技术偏离表 import get_tech_and_business_deviation from flask_app.general.接口_技术偏离表 import get_tech_and_business_deviation
from flask_app.routes.utils import generate_deviation_response, validate_request from flask_app.routes.utils import generate_deviation_response, validate_request, validate_and_setup_logger
from flask_app.ConnectionLimiter import require_connection_limit from flask_app.ConnectionLimiter import require_connection_limit
get_deviation_bp = Blueprint('get_deviation', __name__) get_deviation_bp = Blueprint('get_deviation', __name__)
@get_deviation_bp.route('/get_deviation', methods=['POST']) @get_deviation_bp.route('/get_deviation', methods=['POST'])
@require_connection_limit(timeout=700) @require_connection_limit(timeout=700)
@validate_and_setup_logger
def get_deviation(): def get_deviation():
logger = g.logger logger = g.logger
unique_id = g.unique_id unique_id = g.unique_id

View File

@ -6,17 +6,14 @@ from flask import Blueprint, request, jsonify, Response, g
from flask_app.ConnectionLimiter import require_connection_limit from flask_app.ConnectionLimiter import require_connection_limit
from flask_app.main.download import download_file from flask_app.main.download import download_file
from flask_app.general.post_processing import outer_post_processing
from flask_app.general.接口_小解析 import little_parse_main from flask_app.general.接口_小解析 import little_parse_main
from flask_app.routes.utils import validate_request, validate_and_setup_logger
from flask_app.logger_setup import CSTFormatter
from flask_app.routes.utils import validate_request
little_zbparse_bp = Blueprint('little_zbparse', __name__) little_zbparse_bp = Blueprint('little_zbparse', __name__)
@little_zbparse_bp.route('/little_zbparse', methods=['POST']) @little_zbparse_bp.route('/little_zbparse', methods=['POST'])
@require_connection_limit(timeout=300) @require_connection_limit(timeout=300)
@validate_and_setup_logger
def little_zbparse(): def little_zbparse():
logger = g.logger logger = g.logger
file_url, zb_type = validate_request() file_url, zb_type = validate_request()

View File

@ -1,12 +1,15 @@
# flask_app/routes/test_zbparse.py # flask_app/routes/test_zbparse.py
from flask import Blueprint, Response, stream_with_context from flask import Blueprint, Response, stream_with_context, current_app, jsonify
import json import json
import time import time
from flask_app.routes.utils import validate_and_setup_logger
test_zbparse_bp = Blueprint('test_zbparse', __name__) test_zbparse_bp = Blueprint('test_zbparse', __name__)
@test_zbparse_bp.route('/api/test_zbparse', methods=['POST']) @test_zbparse_bp.route('/api/test_zbparse', methods=['POST'])
@validate_and_setup_logger
def test_zbparse(): def test_zbparse():
try: try:
return Response(stream_with_context(test_process_and_stream()), content_type='text/event-stream') return Response(stream_with_context(test_process_and_stream()), content_type='text/event-stream')

View File

@ -1,5 +1,5 @@
# flask_app/routes/upload.py # flask_app/routes/upload.py
from flask import Blueprint, request, jsonify, Response, stream_with_context, g from flask import Blueprint, request, jsonify,g
import json import json
import os import os
import time import time
@ -8,9 +8,7 @@ from flask_app.main.download import download_file
from flask_app.main.工程标解析main import engineering_bid_main from flask_app.main.工程标解析main import engineering_bid_main
from flask_app.货物标.货物标解析main import goods_bid_main from flask_app.货物标.货物标解析main import goods_bid_main
from flask_app.general.post_processing import outer_post_processing from flask_app.general.post_processing import outer_post_processing
from flask_app.general.接口_技术偏离表 import get_tech_and_business_deviation from flask_app.routes.utils import generate_deviation_response, validate_request, validate_and_setup_logger
from flask_app.routes.utils import generate_deviation_response, validate_request
from flask_app.logger_setup import CSTFormatter
from flask_app.ConnectionLimiter import require_connection_limit from flask_app.ConnectionLimiter import require_connection_limit
@ -18,6 +16,7 @@ upload_bp = Blueprint('upload', __name__)
@upload_bp.route('/upload', methods=['POST']) @upload_bp.route('/upload', methods=['POST'])
@require_connection_limit(timeout=800) @require_connection_limit(timeout=800)
@validate_and_setup_logger
def zbparse(): def zbparse():
logger = g.logger logger = g.logger
try: try:

View File

@ -1,8 +1,11 @@
#flask_app/routes/utils.py
import json import json
from functools import wraps from functools import wraps
from flask import request, jsonify, current_app from flask import request, jsonify, current_app
from flask_app.logger_setup import create_logger
def validate_request(): def validate_request():
""" """
@ -79,4 +82,32 @@ def require_connection_limit():
finally: finally:
limiter.semaphore.release() limiter.semaphore.release()
return wrapped return wrapped
return decorator return decorator
#装饰器来简化验证和日志初始化
def validate_and_setup_logger(f):
@wraps(f)
def decorated_function(*args, **kwargs):
# 进行请求验证
validation_result = validate_request()
if isinstance(validation_result, tuple):
file_url, zb_type = validation_result
# 根据蓝图确定子文件夹
blueprint = request.blueprint
subfolder_map = {
'get_deviation': 'output3',
'little_zbparse': 'output2',
'upload': 'output1',
'test_zbparse': 'test_output'
}
subfolder = subfolder_map.get(blueprint, 'output1')
# 创建 logger 和 output_folder
create_logger(current_app, subfolder)
return f(*args, **kwargs)
else:
# 验证失败,返回错误响应
return validation_result
return decorated_function

View File

@ -23,33 +23,33 @@ def create_app():
handler.setFormatter(CSTFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')) handler.setFormatter(CSTFormatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s'))
app.logger.addHandler(handler) app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO) app.logger.setLevel(logging.INFO)
@app.before_request # @app.before_request
def before_request(): # def before_request():
""" # """
每个请求开始前初始化 logger output_folder # 每个请求开始前初始化 logger 和 output_folder
根据请求的端点选择不同的子文件夹 # 根据请求的端点选择不同的子文件夹。
""" # """
# 确定当前请求的端点 # # 确定当前请求的端点
blueprint = request.blueprint # blueprint = request.blueprint
# 映射端点到子文件夹 # # 映射端点到子文件夹
subfolder_map = { # subfolder_map = {
'get_deviation': 'output3', # 'get_deviation': 'output3',
'little_zbparse': 'output2', # 'little_zbparse': 'output2',
'upload': 'output1', # 'upload': 'output1',
'test_zbparse': 'test_output' # 'test_zbparse': 'test_output'
} # }
# 获取对应的子文件夹,默认为 'output1' # # 获取对应的子文件夹,默认为 'output1'
subfolder = subfolder_map.get(blueprint, 'output1') # subfolder = subfolder_map.get(blueprint, 'output1')
# 创建 logger 和 output_folder # # 创建 logger 和 output_folder
create_logger(app, subfolder) # create_logger(app, subfolder)
# 注册蓝图 # 注册蓝图
app.register_blueprint(get_deviation_bp) app.register_blueprint(get_deviation_bp)
app.register_blueprint(little_zbparse_bp) app.register_blueprint(little_zbparse_bp)
app.register_blueprint(upload_bp) app.register_blueprint(upload_bp)
app.register_blueprint(test_zbparse_bp) app.register_blueprint(test_zbparse_bp)
app.connection_limiters['upload'] = ConnectionLimiter(max_connections=7) app.connection_limiters['upload'] = ConnectionLimiter(max_connections=10)
app.connection_limiters['get_deviation'] = ConnectionLimiter(max_connections=7) app.connection_limiters['get_deviation'] = ConnectionLimiter(max_connections=10)
app.connection_limiters['default'] = ConnectionLimiter(max_connections=10) app.connection_limiters['default'] = ConnectionLimiter(max_connections=10)
@app.teardown_request @app.teardown_request