fix(#781): 替换print为logging,统一日志输出规范
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 8s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 37s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m3s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m6s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 28s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m12s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 9s
AI Code Review / AI Code Review (pull_request) Successful in 3m3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m42s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m10s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 8m47s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m39s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 48m8s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1309h38m2s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1309h38m53s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1309h38m54s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1309h38m56s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1309h44m33s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1309h44m40s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1309h44m43s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1309h44m45s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1310h6m15s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1310h6m19s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1310h11m21s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1310h17m4s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1310h38m42s
CI/CD Pipeline / Check if frontend-only change (pull_request) Successful in 8s
CI/CD Pipeline / Frontend Lint (pull_request) Successful in 37s
CI/CD Pipeline / Validate - Migration (alembic) (pull_request) Successful in 1m3s
CI/CD Pipeline / Validate - Type Check (mypy) (pull_request) Successful in 1m6s
CI/CD Pipeline / PR Build Web Image (pull_request) Successful in 28s
CI/CD Pipeline / Validate - Code Quality (pull_request) Successful in 3m12s
Preview Deploy / Deploy Preview Environment (pull_request) Failing after 9s
AI Code Review / AI Code Review (pull_request) Successful in 3m3s
CI/CD Pipeline / PR Build API Image (pull_request) Successful in 3m42s
PR Automation / Auto Approve on CI Green (pull_request) Successful in 3m10s
CI/CD Pipeline / PR Build Worker Image (pull_request) Successful in 8m47s
CI/CD Pipeline / Unit Tests (pull_request) Successful in 2m40s
CI/CD Pipeline / Integration Tests (pull_request) Successful in 2m39s
PR Automation / Auto Merge on CI Green + Approved (pull_request) Successful in 48m8s
Preview Cleanup / Cleanup Preview Environment (pull_request) Successful in 42s
CI/CD Pipeline / Production Browser E2E (pull_request) Failing after 1309h38m2s
CI/CD Pipeline / ACR Image Cleanup (pull_request) Failing after 1309h38m53s
CI/CD Pipeline / Staging API Integration Tests (pull_request) Failing after 1309h38m54s
CI/CD Pipeline / Deploy Production (pull_request) Failing after 1309h38m56s
CI/CD Pipeline / Deploy Staging (Watchtower auto-deploy) (pull_request) Failing after 1309h44m33s
CI/CD Pipeline / Build Production Web Image (pull_request) Failing after 1309h44m40s
CI/CD Pipeline / Build Production API Image (pull_request) Failing after 1309h44m43s
CI/CD Pipeline / Frontend Unit Tests (pull_request) Failing after 1309h44m45s
CI/CD Pipeline / Build Staging Worker Image (pull_request) Failing after 1310h6m15s
CI/CD Pipeline / Build Staging API Image (pull_request) Failing after 1310h6m19s
CI/CD Pipeline / Staging E2E Tests (pull_request) Failing after 1310h11m21s
CI/CD Pipeline / Build Production Worker Image (pull_request) Failing after 1310h17m4s
CI/CD Pipeline / Build Staging Web Image (pull_request) Failing after 1310h38m42s
- redis/session_store.py: 8处print → logger.warning - auth/password_reset_use_case.py: 2处print → logger.warning/error - auth/register_user_use_case.py: 2处print → logger.warning/error - 异常捕获处加exc_info=True保留完整栈信息 - 3个文件,+21/-12
This commit is contained in:
Executable → Regular
+11
-8
@@ -4,6 +4,7 @@ Redis Session 存储
|
||||
"""
|
||||
|
||||
import json
|
||||
import logging
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
|
||||
@@ -12,6 +13,8 @@ from redis import Redis
|
||||
|
||||
from packages.domain.auth.session_store import SessionStorePort
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RedisConfig:
|
||||
"""Redis 配置"""
|
||||
@@ -147,7 +150,7 @@ class SessionStore(SessionStorePort):
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Failed to save session: {e}")
|
||||
logger.warning(f"Redis session save failed: {e}")
|
||||
return False
|
||||
|
||||
def get_session(self, session_id: str) -> Optional[dict]:
|
||||
@@ -168,7 +171,7 @@ class SessionStore(SessionStorePort):
|
||||
return json.loads(data)
|
||||
return None
|
||||
except Exception as e:
|
||||
print(f"Failed to get session: {e}")
|
||||
logger.warning(f"Redis session get failed: {e}")
|
||||
return None
|
||||
|
||||
def get_session_by_refresh_token(self, refresh_token: str) -> Optional[dict]:
|
||||
@@ -192,7 +195,7 @@ class SessionStore(SessionStorePort):
|
||||
# 再获取完整的 session 数据
|
||||
return self.get_session(session_id)
|
||||
except Exception as e:
|
||||
print(f"Failed to get session by refresh_token: {e}")
|
||||
logger.warning(f"Redis session get by refresh failed: {e}")
|
||||
return None
|
||||
|
||||
def get_refresh_token(self, session_id: str) -> Optional[str]:
|
||||
@@ -209,7 +212,7 @@ class SessionStore(SessionStorePort):
|
||||
refresh_token_key = self._refresh_token_key(session_id)
|
||||
return self.redis.get(refresh_token_key)
|
||||
except Exception as e:
|
||||
print(f"Failed to get refresh_token: {e}")
|
||||
logger.warning(f"Redis refresh token get failed: {e}")
|
||||
return None
|
||||
|
||||
def update_last_active(self, session_id: str) -> bool:
|
||||
@@ -238,7 +241,7 @@ class SessionStore(SessionStorePort):
|
||||
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"Failed to update last active: {e}")
|
||||
logger.warning(f"Redis session update active failed: {e}")
|
||||
return False
|
||||
|
||||
def delete_session(self, session_id: str) -> bool:
|
||||
@@ -278,7 +281,7 @@ class SessionStore(SessionStorePort):
|
||||
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Failed to delete session: {e}")
|
||||
logger.warning(f"Redis session delete failed: {e}")
|
||||
return False
|
||||
|
||||
def get_user_sessions(self, user_id: str) -> list[dict]:
|
||||
@@ -303,7 +306,7 @@ class SessionStore(SessionStorePort):
|
||||
|
||||
return sessions
|
||||
except Exception as e:
|
||||
print(f"Failed to get user sessions: {e}")
|
||||
logger.warning(f"Redis user sessions list failed: {e}")
|
||||
return []
|
||||
|
||||
def delete_all_user_sessions(self, user_id: str) -> int:
|
||||
@@ -330,7 +333,7 @@ class SessionStore(SessionStorePort):
|
||||
|
||||
return count
|
||||
except Exception as e:
|
||||
print(f"Failed to delete all user sessions: {e}")
|
||||
logger.warning(f"Redis user sessions delete failed: {e}")
|
||||
return 0
|
||||
|
||||
def session_exists(self, session_id: str) -> bool:
|
||||
|
||||
Executable → Regular
+5
-2
@@ -2,6 +2,7 @@
|
||||
密码重置 Use Case
|
||||
"""
|
||||
|
||||
import logging
|
||||
import secrets
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from typing import Optional
|
||||
@@ -9,6 +10,8 @@ from typing import Optional
|
||||
from packages.adapters.smtp import get_email_service
|
||||
from packages.application.auth.password_hasher import password_hasher, password_validator
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RequestPasswordResetRequest:
|
||||
"""请求密码重置"""
|
||||
@@ -82,10 +85,10 @@ class RequestPasswordResetUseCase:
|
||||
)
|
||||
|
||||
if not success:
|
||||
print(f"Failed to send password reset email: {error}")
|
||||
logger.warning(f"Password reset email failed: {error}")
|
||||
# 不返回错误,避免暴露用户存在性
|
||||
except Exception as e:
|
||||
print(f"Email service error: {e}")
|
||||
logger.error(f"Email service error: {e}", exc_info=True)
|
||||
|
||||
return True, None
|
||||
|
||||
|
||||
Executable → Regular
+5
-2
@@ -2,6 +2,7 @@
|
||||
用户注册 Use Case
|
||||
"""
|
||||
|
||||
import logging
|
||||
import secrets
|
||||
from datetime import datetime, timezone
|
||||
from typing import Optional
|
||||
@@ -11,6 +12,8 @@ from packages.adapters.smtp import get_email_service
|
||||
from packages.application.auth.password_hasher import password_hasher, password_validator
|
||||
from packages.domain.entities import User
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class RegisterUserRequest:
|
||||
"""注册请求"""
|
||||
@@ -136,9 +139,9 @@ class RegisterUserUseCase:
|
||||
email_sent = success
|
||||
|
||||
if not success:
|
||||
print(f"Failed to send verification email: {error}")
|
||||
logger.warning(f"Verification email failed: {error}")
|
||||
except Exception as e:
|
||||
print(f"Email service error: {e}")
|
||||
logger.error(f"Email service error: {e}", exc_info=True)
|
||||
|
||||
# 10. 返回响应(即使邮件发送失败,用户也已创建)
|
||||
return (
|
||||
|
||||
Reference in New Issue
Block a user