From ad9eb3859dca57be8447275587fe18a9a4c3907f Mon Sep 17 00:00:00 2001 From: hwzhuhao <923196325@qq.com> Date: Tue, 22 Oct 2024 10:31:14 +0800 Subject: [PATCH] feat:support user-defined configuration of log file size and retention count --- api/.env.example | 4 ++++ api/configs/feature/__init__.py | 10 ++++++++++ api/extensions/ext_logging.py | 16 +++++++++------- docker/.env.example | 6 ++++++ docker/docker-compose.yaml | 2 ++ 5 files changed, 31 insertions(+), 7 deletions(-) diff --git a/api/.env.example b/api/.env.example index 33c58ed69168a5..6919259d8bde6a 100644 --- a/api/.env.example +++ b/api/.env.example @@ -304,6 +304,10 @@ RESPECT_XFORWARD_HEADERS_ENABLED=false # Log file path LOG_FILE= +# Log file max size, the unit is MB +LOG_FILE_MAX_SIZE=20 +# Log file max backup count +LOG_FILE_BACKUP_COUNT=5 # Indexing configuration INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=1000 diff --git a/api/configs/feature/__init__.py b/api/configs/feature/__init__.py index 307bc94a79cd15..da155a54513a20 100644 --- a/api/configs/feature/__init__.py +++ b/api/configs/feature/__init__.py @@ -304,6 +304,16 @@ class LoggingConfig(BaseSettings): default=None, ) + LOG_FILE_MAX_SIZE: PositiveInt = Field( + description="Maximum file size for file rotation retention, the unit is megabytes (MB)", + default=20, + ) + + LOG_FILE_BACKUP_COUNT: PositiveInt = Field( + description="Maximum file backup count file rotation retention", + default=5, + ) + LOG_FORMAT: str = Field( description="Format string for log messages", default="%(asctime)s.%(msecs)03d %(levelname)s [%(threadName)s] [%(filename)s:%(lineno)d] - %(message)s", diff --git a/api/extensions/ext_logging.py b/api/extensions/ext_logging.py index 22f868881f0d17..56b1d6bd28ba90 100644 --- a/api/extensions/ext_logging.py +++ b/api/extensions/ext_logging.py @@ -5,30 +5,32 @@ from flask import Flask +from configs import dify_config + def init_app(app: Flask): log_handlers = None - log_file = app.config.get("LOG_FILE") + log_file = dify_config.LOG_FILE if log_file: log_dir = os.path.dirname(log_file) os.makedirs(log_dir, exist_ok=True) log_handlers = [ RotatingFileHandler( filename=log_file, - maxBytes=1024 * 1024 * 1024, - backupCount=5, + maxBytes=dify_config.LOG_FILE_MAX_SIZE * 1024 * 1024, + backupCount=dify_config.LOG_FILE_BACKUP_COUNT, ), logging.StreamHandler(sys.stdout), ] logging.basicConfig( - level=app.config.get("LOG_LEVEL"), - format=app.config.get("LOG_FORMAT"), - datefmt=app.config.get("LOG_DATEFORMAT"), + level=dify_config.LOG_LEVEL, + format=dify_config.LOG_FORMAT, + datefmt=dify_config.LOG_DATEFORMAT, handlers=log_handlers, force=True, ) - log_tz = app.config.get("LOG_TZ") + log_tz = dify_config.LOG_TZ if log_tz: from datetime import datetime diff --git a/docker/.env.example b/docker/.env.example index f022a451cf119d..dbdc943b06035e 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -48,6 +48,12 @@ FILES_URL= # The log level for the application. # Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL` LOG_LEVEL=INFO +# Log file path +LOG_FILE= +# Log file max size, the unit is MB +LOG_FILE_MAX_SIZE=20 +# Log file max backup count +LOG_FILE_BACKUP_COUNT=5 # Debug mode, default is false. # It is recommended to turn on this configuration for local development diff --git a/docker/docker-compose.yaml b/docker/docker-compose.yaml index 614b1ccc6bbe5e..7cea5b0d1f7750 100644 --- a/docker/docker-compose.yaml +++ b/docker/docker-compose.yaml @@ -1,6 +1,8 @@ x-shared-env: &shared-api-worker-env LOG_LEVEL: ${LOG_LEVEL:-INFO} LOG_FILE: ${LOG_FILE:-} + LOG_FILE_MAX_SIZE: ${LOG_FILE_MAX_SIZE:-20} + LOG_FILE_BACKUP_COUNT: ${LOG_FILE_BACKUP_COUNT:-5} DEBUG: ${DEBUG:-false} FLASK_DEBUG: ${FLASK_DEBUG:-false} SECRET_KEY: ${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U}