mirror of
https://github.com/snailyp/gemini-balance.git
synced 2026-05-26 10:49:32 +08:00
本次提交主要包含以下内容:
1. **日志自动删除功能**:
* 新增环境变量 (`AUTO_DELETE_ERROR_LOGS_ENABLED`, `AUTO_DELETE_ERROR_LOGS_DAYS`, `AUTO_DELETE_REQUEST_LOGS_ENABLED`, `AUTO_DELETE_REQUEST_LOGS_DAYS`) 用于控制错误日志和请求日志的自动删除策略。
* 在 `app/config/config.py` 中添加了对这些新配置项的支持和验证逻辑 (Pydantic `validator` 更新为 `field_validator`)。
* 修改了 `app/log/logger.py` 以适应新的日志配置。
* 新增 `app/scheduler/scheduled_tasks.py` 用于执行定期的日志清理任务。
* 新增 `app/service/error_log/error_log_service.py` 和 `app/service/request_log/request_log_service.py` 来处理具体的日志删除逻辑。
* 更新了 `app/router/error_log_routes.py` 和 `app/router/scheduler_routes.py` 以集成新功能。
2. **前端配置页面更新**:
* 在 `app/templates/config_editor.html` 和 `app/static/js/config_editor.js` 中添加了用于配置日志自动删除选项的用户界面元素。
3. **代码和文件结构调整**:
* 删除了不再使用的 `app/scheduler/key_checker.py` 文件。
* 在 `.gitignore` 文件中添加了 `default_db` 以忽略该目录。
4. **其他**:
* 对 `app/core/application.py` 进行了相应调整。
该更新旨在增强应用的日志管理能力,提供更灵活的日志保留策略,并优化了配置界面的用户体验。
51 lines
1.4 KiB
Python
51 lines
1.4 KiB
Python
"""
|
|
Service for request log operations.
|
|
"""
|
|
|
|
from datetime import datetime, timedelta
|
|
|
|
from sqlalchemy import delete
|
|
|
|
from app import database
|
|
from app.config.config import settings
|
|
from app.database.models import RequestLog
|
|
from app.log.logger import Logger
|
|
|
|
logger = Logger.setup_logger("request_log_service")
|
|
|
|
|
|
async def delete_old_request_logs_task():
|
|
"""
|
|
定时删除旧的请求日志。
|
|
"""
|
|
if not settings.AUTO_DELETE_REQUEST_LOGS_ENABLED:
|
|
logger.info(
|
|
"Auto-delete for request logs is disabled by settings. Skipping task."
|
|
)
|
|
return
|
|
|
|
days_to_keep = settings.AUTO_DELETE_REQUEST_LOGS_DAYS
|
|
logger.info(
|
|
f"Starting scheduled task to delete old request logs older than {days_to_keep} days."
|
|
)
|
|
|
|
try:
|
|
cutoff_date = datetime.now(datetime.timezone.utc) - timedelta(days=days_to_keep)
|
|
|
|
query = delete(RequestLog).where(RequestLog.request_time < cutoff_date)
|
|
|
|
if not database.is_connected:
|
|
logger.info("Connecting to database for request log deletion.")
|
|
await database.connect()
|
|
|
|
result = await database.execute(query)
|
|
logger.info(
|
|
f"Request logs older than {cutoff_date} potentially deleted. Rows affected: {result.rowcount if result else 'N/A'}"
|
|
)
|
|
|
|
except Exception as e:
|
|
logger.error(
|
|
f"An error occurred during the scheduled request log deletion: {str(e)}",
|
|
exc_info=True,
|
|
)
|