Files
ragflow/internal/logger
Zhichang Yu 0d85a8e7aa 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>
2026-03-30 18:40:58 +08:00
..
2026-03-04 19:17:16 +08:00

Logger Package

This package provides structured logging using Uber's Zap library.

Installation

Install zap dependency:

go get go.uber.org/zap

Usage

The logger is initialized in cmd/server_main.go and is available throughout the application.

Basic Usage

import (
    "ragflow/internal/logger"
    "go.uber.org/zap"
)

// Log with structured fields
logger.Info("User login", zap.String("user_id", userID), zap.String("ip", clientIP))

// Log error
logger.Error("Failed to connect database", err)

// Log fatal (exits application)
logger.Fatal("Failed to start server", err)

// Debug level
logger.Debug("Processing request", zap.String("request_id", reqID))

// Warning level
logger.Warn("Slow query", zap.Duration("duration", duration))

Access Logger Directly

If you need the underlying Zap logger:

logger.Logger.Info("Message", zap.String("key", "value"))

Or use the SugaredLogger for more flexible API:

logger.Sugar.Infow("Message", "key", "value")

Fallback to Standard Logger

If zap is not installed or fails to initialize, the logger will fallback to the standard library log package, ensuring the application continues to work.

Log Levels

The logger supports the following levels:

  • debug - Detailed information for debugging
  • info - General informational messages
  • warn - Warning messages
  • error - Error messages
  • fatal - Fatal errors that stop the application

The log level is configured via the server mode in the configuration:

  • debug mode uses debug level
  • release mode uses info level