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.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
from flask_app.routes.utils import generate_deviation_response, validate_request, validate_and_setup_logger
from flask_app.ConnectionLimiter import require_connection_limit
get_deviation_bp = Blueprint('get_deviation', __name__)
@get_deviation_bp.route('/get_deviation', methods=['POST'])
@require_connection_limit(timeout=700)
@validate_and_setup_logger
def get_deviation():
logger = g.logger
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.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.logger_setup import CSTFormatter
from flask_app.routes.utils import validate_request
from flask_app.routes.utils import validate_request, validate_and_setup_logger
little_zbparse_bp = Blueprint('little_zbparse', __name__)
@little_zbparse_bp.route('/little_zbparse', methods=['POST'])
@require_connection_limit(timeout=300)
@validate_and_setup_logger
def little_zbparse():
logger = g.logger
file_url, zb_type = validate_request()

View File

@ -1,12 +1,15 @@
# 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 time
from flask_app.routes.utils import validate_and_setup_logger
test_zbparse_bp = Blueprint('test_zbparse', __name__)
@test_zbparse_bp.route('/api/test_zbparse', methods=['POST'])
@validate_and_setup_logger
def test_zbparse():
try:
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
from flask import Blueprint, request, jsonify, Response, stream_with_context, g
from flask import Blueprint, request, jsonify,g
import json
import os
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 import goods_bid_main
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
from flask_app.logger_setup import CSTFormatter
from flask_app.routes.utils import generate_deviation_response, validate_request, validate_and_setup_logger
from flask_app.ConnectionLimiter import require_connection_limit
@ -18,6 +16,7 @@ upload_bp = Blueprint('upload', __name__)
@upload_bp.route('/upload', methods=['POST'])
@require_connection_limit(timeout=800)
@validate_and_setup_logger
def zbparse():
logger = g.logger
try:

View File

@ -1,8 +1,11 @@
#flask_app/routes/utils.py
import json
from functools import wraps
from flask import request, jsonify, current_app
from flask_app.logger_setup import create_logger
def validate_request():
"""
@ -79,4 +82,32 @@ def require_connection_limit():
finally:
limiter.semaphore.release()
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'))
app.logger.addHandler(handler)
app.logger.setLevel(logging.INFO)
@app.before_request
def before_request():
"""
每个请求开始前初始化 logger output_folder
根据请求的端点选择不同的子文件夹
"""
# 确定当前请求的端点
blueprint = request.blueprint
# 映射端点到子文件夹
subfolder_map = {
'get_deviation': 'output3',
'little_zbparse': 'output2',
'upload': 'output1',
'test_zbparse': 'test_output'
}
# 获取对应的子文件夹,默认为 'output1'
subfolder = subfolder_map.get(blueprint, 'output1')
# 创建 logger 和 output_folder
create_logger(app, subfolder)
# @app.before_request
# def before_request():
# """
# 每个请求开始前初始化 logger 和 output_folder
# 根据请求的端点选择不同的子文件夹。
# """
# # 确定当前请求的端点
# blueprint = request.blueprint
# # 映射端点到子文件夹
# subfolder_map = {
# 'get_deviation': 'output3',
# 'little_zbparse': 'output2',
# 'upload': 'output1',
# 'test_zbparse': 'test_output'
# }
# # 获取对应的子文件夹,默认为 'output1'
# subfolder = subfolder_map.get(blueprint, 'output1')
# # 创建 logger 和 output_folder
# create_logger(app, subfolder)
# 注册蓝图
app.register_blueprint(get_deviation_bp)
app.register_blueprint(little_zbparse_bp)
app.register_blueprint(upload_bp)
app.register_blueprint(test_zbparse_bp)
app.connection_limiters['upload'] = ConnectionLimiter(max_connections=7)
app.connection_limiters['get_deviation'] = ConnectionLimiter(max_connections=7)
app.connection_limiters['upload'] = ConnectionLimiter(max_connections=10)
app.connection_limiters['get_deviation'] = ConnectionLimiter(max_connections=10)
app.connection_limiters['default'] = ConnectionLimiter(max_connections=10)
@app.teardown_request