refactor(logging): centralize console output

This commit is contained in:
2026-06-18 13:34:19 +08:00
parent f600e11d55
commit 812a3e41b9
24 changed files with 261 additions and 166 deletions
+15 -13
View File
@@ -8,7 +8,7 @@
* - 登录成功后调 `_saveLoginData` 持久化 token + User
* - 登出先调 API,再强制清本地态(无论 API 成败)
* - `getCurrentUser` 成功后尽力写本地 User 缓存(不因缓存失败影响主流程)
* - 写 storage 失败用 `console.warn` 记录,不让本地缓存失败影响主流程
* - 写 storage 失败用 `Logger.warn` 记录,不让本地缓存失败影响主流程
*
* 原始 Dart: lib/data/repositories/auth_repository_impl.dart
*/
@@ -28,11 +28,13 @@ import {
SendCodeRequest,
} from "@/data/dto/auth";
import { User } from "@/data/dto/user";
import { Result } from "@/utils";
import { Result, Logger } from "@/utils";
import type { IAuthRepository } from "@/data/repositories/interfaces";
import { AuthStorage, type IAuthStorage } from "@/data/storage/auth";
import { UserStorage, type IUserStorage } from "@/data/storage/user";
const log = new Logger("DataRepositoriesAuthRepository");
/** 硬编码平台名,对齐 Dart `PlatformUtil.platformName.toLowerCase()`Web 平台)。 */
const WEB_PLATFORM = "web";
@@ -106,7 +108,7 @@ export class AuthRepository implements IAuthRepository {
await this.api.logout();
} catch (e) {
// API 失败也要继续清本地态
console.warn("[AuthRepository] logout API failed, clearing local anyway", e);
log.warn("[AuthRepository] logout API failed, clearing local anyway", e);
}
try {
await this.storage.clearAuthData();
@@ -123,7 +125,7 @@ export class AuthRepository implements IAuthRepository {
* 成功后写 guest token + deviceId + userId。
*/
async guestLogin(deviceId: string): Promise<Result<GuestLoginResponse>> {
console.log("[AuthRepository.guestLogin] API call START", {
log.debug("[AuthRepository.guestLogin] API call START", {
deviceIdLength: deviceId.length,
deviceIdPrefix: deviceId.slice(0, 8),
});
@@ -131,7 +133,7 @@ export class AuthRepository implements IAuthRepository {
const response = await this.api.guestLogin(
GuestLoginRequest.from({ deviceId }),
);
console.log("[AuthRepository.guestLogin] API call SUCCESS (Zod parsed)", {
log.debug("[AuthRepository.guestLogin] API call SUCCESS (Zod parsed)", {
hasToken: !!response.token,
hasUser: !!response.user,
userLastMessageAt: response.user?.lastMessageAt,
@@ -143,7 +145,7 @@ export class AuthRepository implements IAuthRepository {
}
return response;
}).catch((e) => {
console.error("[AuthRepository.guestLogin] API call FAILED", {
log.error("[AuthRepository.guestLogin] API call FAILED", {
errorName: e?.name,
errorMessage: e?.message,
});
@@ -238,14 +240,14 @@ export class AuthRepository implements IAuthRepository {
/**
* 获取当前登录用户。成功后尽力写本地 User 缓存(offline hydrate),
* 缓存失败用 `console.warn` 记录,不影响主流程。
* 缓存失败用 `Logger.warn` 记录,不影响主流程。
*/
async getCurrentUser(): Promise<Result<User>> {
return Result.wrap(async () => {
const user = await this.api.getCurrentUser();
const writeResult = await this.userStorage.setUser(user.toJson());
if (!writeResult.success) {
console.warn(
log.warn(
"[AuthRepository] failed to cache current user",
writeResult.error,
);
@@ -272,27 +274,27 @@ export class AuthRepository implements IAuthRepository {
/**
* 持久化登录态:login token → refresh token → User 对象 → userId。
* 全部 best-effort,错误用 `console.warn` 记录但不让登录「失败」——
* 全部 best-effort,错误用 `Logger.warn` 记录但不让登录「失败」——
* 调用方已经从 API 拿到了 LoginResponse,缓存只是离线加速。
*/
private async _saveLoginData(data: LoginResponse): Promise<void> {
const r1 = await this.storage.setLoginToken(data.token);
if (!r1.success) {
console.warn("[AuthRepository] setLoginToken failed", r1.error);
log.warn("[AuthRepository] setLoginToken failed", r1.error);
}
if (data.refreshToken) {
const r2 = await this.storage.setRefreshToken(data.refreshToken);
if (!r2.success) {
console.warn("[AuthRepository] setRefreshToken failed", r2.error);
log.warn("[AuthRepository] setRefreshToken failed", r2.error);
}
}
const r3 = await this.userStorage.setUser(data.user.toJson());
if (!r3.success) {
console.warn("[AuthRepository] setUser failed", r3.error);
log.warn("[AuthRepository] setUser failed", r3.error);
}
const r4 = await this.userStorage.setUserId(data.user.id);
if (!r4.success) {
console.warn("[AuthRepository] setUserId failed", r4.error);
log.warn("[AuthRepository] setUserId failed", r4.error);
}
}
}
+7 -4
View File
@@ -23,6 +23,9 @@ import { RegisterRequest } from "@/data/dto/auth/register_request";
import { SendCodeRequest } from "@/data/dto/auth/send_code_request";
import { User } from "@/data/dto/user/user";
import type { UserData } from "@/data/schemas/user/user";
import { Logger } from "@/utils";
const log = new Logger("DataServicesApiAuthApi");
export class AuthApi {
/**
@@ -123,10 +126,10 @@ export class AuthApi {
method: "POST",
body: body.toJson(),
});
console.log("[AuthApi.guestLogin] raw envelope from backend", env);
log.debug("[AuthApi.guestLogin] raw envelope from backend", env);
const unwrapped = unwrap(env) as Record<string, unknown>;
const userObj = unwrapped.user as { lastMessageAt?: unknown } | undefined;
console.log("[AuthApi.guestLogin] unwrapped data (pre-parse)", {
log.debug("[AuthApi.guestLogin] unwrapped data (pre-parse)", {
hasUser: "user" in unwrapped,
userKeys: userObj && typeof userObj === "object" ? Object.keys(userObj) : null,
lastMessageAt: userObj?.lastMessageAt,
@@ -136,13 +139,13 @@ export class AuthApi {
return GuestLoginResponse.fromJson(unwrapped);
} catch (e) {
if (e instanceof z.ZodError) {
console.error("[AuthApi.guestLogin] ZodError parsing response", {
log.error("[AuthApi.guestLogin] ZodError parsing response", {
issueCount: e.issues.length,
firstIssue: e.issues[0],
allPaths: e.issues.map((i) => i.path),
});
} else {
console.error("[AuthApi.guestLogin] unexpected error", e);
log.error("[AuthApi.guestLogin] unexpected error", e);
}
throw e;
}