mirror of
https://github.com/infiniflow/ragflow.git
synced 2026-06-29 15:31:05 +08:00
feat: add dynamic log level adjustment APIs (#13850)
Add REST APIs to dynamically query and modify log levels at runtime for
both Python (Flask) and Go servers.
Changes:
- common/log_utils.py: add set_log_level() and get_log_levels()
functions
- admin/server/routes.py: add GET/PUT /api/v1/admin/log_levels endpoints
- api/apps/system_app.py: add GET/PUT /api/{version}/system/log_levels
endpoints
- internal/logger/logger.go: add GetLevel() and SetLevel() with atomic
level support
- internal/handler/system.go: add GetLogLevel, SetLogLevel, Health
handlers
- internal/router/router.go: route /health to systemHandler
- internal/admin/handler.go: add GetLogLevel, SetLogLevel handlers
- internal/admin/router.go: add /api/v1/admin/log_level routes
### What problem does this PR solve?
_Briefly describe what this PR aims to solve. Include background context
that will help reviewers understand the purpose of the PR._
### Type of change
- [x] New Feature (non-breaking change which adds functionality)
Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -30,6 +30,7 @@ from roles import RoleMgr
|
||||
from api.common.exceptions import AdminException
|
||||
from common.versions import get_ragflow_version
|
||||
from api.utils.api_utils import generate_confirmation_token
|
||||
from common.log_utils import get_log_levels, set_log_level
|
||||
|
||||
admin_bp = Blueprint("admin", __name__, url_prefix="/api/v1/admin")
|
||||
|
||||
@@ -652,3 +653,39 @@ def test_sandbox_connection():
|
||||
return error_response(str(e), 400)
|
||||
except Exception as e:
|
||||
return error_response(str(e), 500)
|
||||
|
||||
|
||||
@admin_bp.route("/log_levels", methods=["GET"])
|
||||
@login_required
|
||||
@check_admin_auth
|
||||
def get_logger_levels():
|
||||
"""Get current log levels for all packages."""
|
||||
try:
|
||||
res = get_log_levels()
|
||||
return success_response(res, "Get log levels", 0)
|
||||
except Exception as e:
|
||||
return error_response(str(e), 500)
|
||||
|
||||
|
||||
@admin_bp.route("/log_levels", methods=["PUT"])
|
||||
@login_required
|
||||
@check_admin_auth
|
||||
def set_logger_level():
|
||||
"""Set log level for a package."""
|
||||
try:
|
||||
data = request.get_json()
|
||||
if not data or "pkg_name" not in data or "level" not in data:
|
||||
return error_response("pkg_name and level are required", 400)
|
||||
|
||||
pkg_name = data["pkg_name"]
|
||||
level = data["level"]
|
||||
if not isinstance(pkg_name, str) or not isinstance(level, str):
|
||||
return error_response("pkg_name and level must be strings", 400)
|
||||
|
||||
success = set_log_level(pkg_name, level)
|
||||
if success:
|
||||
return success_response({"pkg_name": pkg_name, "level": level}, "Log level updated successfully")
|
||||
else:
|
||||
return error_response(f"Invalid log level: {level}", 400)
|
||||
except Exception as e:
|
||||
return error_response(str(e), 500)
|
||||
|
||||
Reference in New Issue
Block a user