chore: 调整存储和日志模块

- oss_storage: 暂时使用本地存储,OSS 代码注释保留
- logger: 优化日志配置

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-02-05 13:57:49 +08:00
parent 885665ecf0
commit c08702085b
2 changed files with 66 additions and 32 deletions

View File

@@ -1,51 +1,77 @@
import uuid
from datetime import datetime, timezone
from typing import Optional
from pathlib import Path
import oss2
# import oss2 # TODO: 阿里云 OSS 待配置完成后启用
from app.config import settings
from app.utils.logger import logger
class OSSStorage:
def __init__(self):
"""
图片存储类
TODO: 阿里云 OSS 配置完成后,注释掉 use_local_only=True 即可启用 OSS
"""
def __init__(self, use_local_only: bool = True):
self.use_local_only = use_local_only
self.bucket = None
if not self.use_local_only:
self._init_bucket()
def _init_bucket(self):
if not settings.oss.access_key_id or not settings.oss.bucket_name:
logger.warning("OSS配置不完整将使用本地存储")
return
try:
auth = oss2.Auth(settings.oss.access_key_id, settings.oss.access_key_secret)
self.bucket = oss2.Bucket(auth, settings.oss.endpoint, settings.oss.bucket_name)
logger.info(f"OSS连接成功: {settings.oss.bucket_name}")
except Exception as e:
logger.error(f"OSS连接失败: {e}")
self.bucket = None
"""
初始化 OSS Bucket待配置完成后启用
"""
# TODO: 阿里云 OSS 配置完成后启用以下代码
# if not settings.oss.access_key_id or not settings.oss.bucket_name:
# logger.warning("OSS配置不完整将使用本地存储")
# self.use_local_only = True
# return
#
# try:
# auth = oss2.Auth(settings.oss.access_key_id, settings.oss.access_key_secret)
# self.bucket = oss2.Bucket(auth, settings.oss.endpoint, settings.oss.bucket_name)
# logger.info(f"OSS连接成功: {settings.oss.bucket_name}")
# except Exception as e:
# logger.error(f"OSS连接失败: {e}")
# self.bucket = None
logger.info("OSS存储已注释启用本地存储模式")
def upload_image(self, image_data: bytes, filename: Optional[str] = None) -> str:
if not self.bucket:
"""
上传图片当前使用本地存储OSS 配置完成后可启用)
"""
if self.use_local_only or not self.bucket:
return self._upload_local(image_data, filename)
if filename is None:
timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
unique_id = uuid.uuid4().hex[:8]
ext = ".jpg"
filename = f"alerts/{timestamp}_{unique_id}{ext}"
# TODO: 阿里云 OSS 配置完成后启用以下代码
# if not self.bucket:
# return self._upload_local(image_data, filename)
#
# if filename is None:
# timestamp = datetime.now().strftime("%Y%m%d%H%M%S")
# unique_id = uuid.uuid4().hex[:8]
# ext = ".jpg"
# filename = f"alerts/{timestamp}_{unique_id}{ext}"
#
# try:
# self.bucket.put_object(filename, image_data)
# url = f"{settings.oss.url_prefix}/{filename}"
# logger.info(f"图片上传OSS成功: {url}")
# return url
# except Exception as e:
# logger.error(f"图片上传OSS失败: {e}")
# return self._upload_local(image_data, filename)
try:
self.bucket.put_object(filename, image_data)
url = f"{settings.oss.url_prefix}/{filename}"
logger.info(f"图片上传OSS成功: {url}")
return url
except Exception as e:
logger.error(f"图片上传OSS失败: {e}")
return self._upload_local(image_data, filename)
def _upload_local(self, image_data: bytes, filename: Optional[str] = None) -> str:
"""
本地存储(当前使用)
"""
upload_dir = Path("uploads")
upload_dir.mkdir(exist_ok=True)
@@ -65,14 +91,19 @@ class OSSStorage:
return local_url
def get_url(self, path: str) -> str:
"""
获取图片访问URL
"""
if path.startswith("http"):
return path
if self.bucket:
return f"{settings.oss.url_prefix}/{path}"
# TODO: 阿里云 OSS 配置完成后启用以下代码
# if self.bucket:
# return f"{settings.oss.url_prefix}/{path}"
return f"/uploads/{path}" if not path.startswith("/") else path
oss_storage = OSSStorage()
# 使用本地存储模式OSS 配置完成后可修改为 OSSStorage(use_local_only=False)
oss_storage = OSSStorage(use_local_only=True)
def get_oss_storage() -> OSSStorage:

View File

@@ -1,6 +1,9 @@
import logging
import sys
from datetime import datetime
from pathlib import Path
from app.config import settings
def setup_logger():