refactor(log): refactor the whole project
format: {time:YYYY-MM-DD HH:mm:ss} [{level}] | {name} | {message}
{name} is:
- Uvicorn: log from uvicorn server (#228B22)
- Service: log from class of `app.service` (blue)
- Fetcher: log from fetchers (magenta)
- Task: log from `app.tasks` (#FFD700)
- System: log from `system_logger` (red)
- Normal: log from `log(name)` (#FFC1C1)
- Default: the module name of caller
if you are writing services or tasks, you can just call `logger.`, we will pack it with name `Service` or `Task`
if you want to print fetcher logs, system-related logs, or normal logs, use `logger = (fetcher_logger / system_logger / log)(name)`
This commit is contained in:
@@ -105,13 +105,13 @@ class PasswordResetService:
|
||||
email_sent = await self.send_password_reset_email(email=email, code=reset_code, username=user.username)
|
||||
|
||||
if email_sent:
|
||||
logger.info(f"[Password Reset] Sent reset code to user {user.id} ({email})")
|
||||
logger.info(f"Sent reset code to user {user.id} ({email})")
|
||||
return True, "密码重置邮件已发送,请查收邮箱"
|
||||
else:
|
||||
# 邮件发送失败,清理Redis中的数据
|
||||
await redis.delete(reset_code_key)
|
||||
await redis.delete(rate_limit_key)
|
||||
logger.warning(f"[Password Reset] Email sending failed, cleaned up Redis data for {email}")
|
||||
logger.warning(f"Email sending failed, cleaned up Redis data for {email}")
|
||||
return False, "邮件发送失败,请稍后重试"
|
||||
|
||||
except Exception:
|
||||
@@ -121,7 +121,7 @@ class PasswordResetService:
|
||||
await redis.delete(rate_limit_key)
|
||||
except Exception:
|
||||
pass
|
||||
logger.exception("[Password Reset] Redis operation failed")
|
||||
logger.exception("Redis operation failed")
|
||||
return False, "服务暂时不可用,请稍后重试"
|
||||
|
||||
async def send_password_reset_email(self, email: str, code: str, username: str) -> bool:
|
||||
@@ -269,11 +269,11 @@ class PasswordResetService:
|
||||
metadata=metadata,
|
||||
)
|
||||
|
||||
logger.info(f"[Password Reset] Enqueued reset code email to {email}")
|
||||
logger.info(f"Enqueued reset code email to {email}")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
logger.error(f"[Password Reset] Failed to enqueue email: {e}")
|
||||
logger.error(f"Failed to enqueue email: {e}")
|
||||
return False
|
||||
|
||||
async def reset_password(
|
||||
@@ -366,7 +366,7 @@ class PasswordResetService:
|
||||
await redis.setex(reset_code_key, 300, json.dumps(reset_data)) # 保留5分钟用于日志记录
|
||||
|
||||
logger.info(
|
||||
f"[Password Reset] User {user_id} ({email}) successfully reset password from IP {ip_address},"
|
||||
f"User {user_id} ({email}) successfully reset password from IP {ip_address},"
|
||||
f" invalidated {tokens_deleted} tokens"
|
||||
)
|
||||
return True, "密码重置成功,所有设备已被登出"
|
||||
@@ -374,7 +374,7 @@ class PasswordResetService:
|
||||
except Exception as e:
|
||||
# 不要在异常处理中访问user.id,可能触发数据库操作
|
||||
user_id = reset_data.get("user_id", "未知")
|
||||
logger.error(f"[Password Reset] Failed to reset password for user {user_id}: {e}")
|
||||
logger.error(f"Failed to reset password for user {user_id}: {e}")
|
||||
await session.rollback()
|
||||
|
||||
# 数据库回滚时,需要恢复Redis中的验证码状态
|
||||
@@ -401,14 +401,14 @@ class PasswordResetService:
|
||||
remaining_ttl,
|
||||
json.dumps(original_reset_data),
|
||||
)
|
||||
logger.info(f"[Password Reset] Restored Redis state after database rollback for {email}")
|
||||
logger.info(f"Restored Redis state after database rollback for {email}")
|
||||
else:
|
||||
# 如果已经过期,直接删除
|
||||
await redis.delete(reset_code_key)
|
||||
logger.info(f"[Password Reset] Removed expired reset code after database rollback for {email}")
|
||||
logger.info(f"Removed expired reset code after database rollback for {email}")
|
||||
|
||||
except Exception as redis_error:
|
||||
logger.error(f"[Password Reset] Failed to restore Redis state after rollback: {redis_error}")
|
||||
logger.error(f"Failed to restore Redis state after rollback: {redis_error}")
|
||||
|
||||
return False, "密码重置失败,请稍后重试"
|
||||
|
||||
@@ -428,7 +428,7 @@ class PasswordResetService:
|
||||
ttl = await redis.ttl(rate_limit_key)
|
||||
return 1 if ttl > 0 else 0
|
||||
except Exception as e:
|
||||
logger.error(f"[Password Reset] Failed to get attempts count: {e}")
|
||||
logger.error(f"Failed to get attempts count: {e}")
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user