Reduce noisy runtime logging in frontend flows.

This keeps chat, notification, and post interactions cleaner in production while preserving error-level visibility.
This commit is contained in:
2026-03-09 22:18:47 +08:00
parent 3968660048
commit 63e32b15a3
21 changed files with 14 additions and 284 deletions

View File

@@ -250,7 +250,6 @@ class MessageManager {
async initialize(): Promise<void> {
if (this.state.isInitialized) {
console.log('[MessageManager] 已经初始化,跳过');
return;
}
@@ -259,7 +258,6 @@ class MessageManager {
return;
}
console.log('[MessageManager] 开始初始化');
this.initializePromise = (async () => {
try {
@@ -280,7 +278,6 @@ class MessageManager {
await this.fetchUnreadCount();
this.state.isInitialized = true;
console.log('[MessageManager] 初始化完成');
this.notifySubscribers({
type: 'conversations_updated',
@@ -310,7 +307,6 @@ class MessageManager {
}
destroy(): void {
console.log('[MessageManager] 销毁资源');
if (this.wsUnsubscribe) {
this.wsUnsubscribe();
this.wsUnsubscribe = null;
@@ -328,41 +324,34 @@ class MessageManager {
this.wsUnsubscribe();
}
console.log('[MessageManager] 初始化WebSocket监听');
// 监听私聊消息
websocketService.on('chat', (message: WSChatMessage) => {
console.log('[MessageManager] 收到私聊消息:', message.id);
this.handleNewMessage(message);
});
// 监听群聊消息
websocketService.on('group_message', (message: WSGroupChatMessage) => {
console.log('[MessageManager] 收到群聊消息:', message.id);
this.handleNewMessage(message);
});
// 监听私聊已读回执
websocketService.on('read', (message: WSReadMessage) => {
console.log('[MessageManager] 收到已读回执:', message);
this.handleReadReceipt(message);
});
// 监听群聊已读回执
websocketService.on('group_read', (message: WSGroupReadMessage) => {
console.log('[MessageManager] 收到群聊已读回执:', message);
this.handleGroupReadReceipt(message);
});
// 监听私聊消息撤回
websocketService.on('recall', (message: WSRecallMessage) => {
console.log('[MessageManager] 收到私聊撤回:', message);
this.handleRecallMessage(message);
});
// 监听群聊消息撤回
websocketService.on('group_recall', (message: WSGroupRecallMessage) => {
console.log('[MessageManager] 收到群聊撤回:', message);
this.handleGroupRecallMessage(message);
});
@@ -373,13 +362,11 @@ class MessageManager {
// 监听群通知
websocketService.on('group_notice', (message: WSGroupNoticeMessage) => {
console.log('[MessageManager] 收到群通知:', message);
this.handleGroupNotice(message);
});
// 监听连接状态
websocketService.onConnect(() => {
console.log('[MessageManager] WebSocket已连接');
this.state.isWebSocketConnected = true;
this.notifySubscribers({
type: 'connection_changed',
@@ -403,7 +390,6 @@ class MessageManager {
});
websocketService.onDisconnect(() => {
console.log('[MessageManager] WebSocket已断开');
this.state.isWebSocketConnected = false;
this.notifySubscribers({
type: 'connection_changed',
@@ -595,29 +581,15 @@ class MessageManager {
const currentUserId = this.getCurrentUserId();
// 【调试日志】追踪消息来源和重复问题
console.log('[MessageManager][DEBUG] 处理新消息:', {
messageId: id,
conversationId: normalizedConversationId,
senderId: sender_id,
seq,
currentUserId,
messageType: message.type,
isAck: _isAck,
currentConversationId: this.state.currentConversationId,
isActiveConversation: normalizedConversationId === this.state.currentConversationId,
timestamp: Date.now(),
});
// 0. 如果是ACK消息直接跳过不增加未读数ACK是发送确认不是新消息
if (_isAck) {
console.log('[MessageManager][DEBUG] ACK消息跳过未读数处理:', id);
// 但仍然需要更新消息列表因为ACK包含完整消息内容
// 继续处理但不增加未读数
}
// 1. 消息去重检查 - 防止ACK消息和正常消息重复处理
if (this.isMessageProcessed(id)) {
console.log('[MessageManager][DEBUG] 消息已处理,跳过:', id);
return;
}
this.markMessageAsProcessed(id);
@@ -627,7 +599,6 @@ class MessageManager {
// 异步获取发送者信息,不阻塞消息显示
this.getSenderInfo(sender_id).then(user => {
if (user) {
console.log('[MessageManager][DEBUG] 获取到发送者信息:', { userId: sender_id, nickname: user.nickname });
// 更新消息对象中的发送者信息
const messages = this.state.messagesMap.get(normalizedConversationId);
if (messages) {
@@ -636,7 +607,6 @@ class MessageManager {
m.id === id ? { ...m, sender: user } : m
);
this.state.messagesMap.set(normalizedConversationId, updatedMessages);
console.log('[MessageManager][DEBUG] 更新消息发送者信息:', { messageId: id, sender: user.nickname });
// 通知订阅者消息已更新
this.notifySubscribers({
type: 'messages_updated',
@@ -648,10 +618,9 @@ class MessageManager {
});
}
} else {
console.log('[MessageManager][DEBUG] 未能获取到发送者信息:', { userId: sender_id });
}
}).catch(error => {
console.error('[MessageManager][DEBUG] 获取发送者信息失败:', { userId: sender_id, error });
console.error('[MessageManager][ERROR] 获取发送者信息失败:', { userId: sender_id, error });
});
}
@@ -694,15 +663,6 @@ class MessageManager {
const isActiveConversation = normalizedConversationId === this.state.currentConversationId;
// 【调试日志】追踪未读数增加逻辑
console.log('[MessageManager][DEBUG] 未读数判断:', {
messageId: id,
sender_id,
currentUserId,
isCurrentUserMessage,
isActiveConversation,
currentConversationId: this.state.currentConversationId,
shouldIncrement: !isCurrentUserMessage && !isActiveConversation,
});
// 修复:确保当前用户发送的消息不会增加未读数
// 同时确保currentUserId有效避免undefined === undefined的情况
@@ -710,15 +670,8 @@ class MessageManager {
const shouldIncrementUnread = !isCurrentUserMessage && !isActiveConversation && !!currentUserId && !_isAck;
if (shouldIncrementUnread) {
console.log('[MessageManager][DEBUG] 增加未读数:', { conversationId: conversation_id, messageId: id });
this.incrementUnreadCount(normalizedConversationId);
} else {
console.log('[MessageManager][DEBUG] 跳过未读数增加:', {
isCurrentUserMessage,
isActiveConversation,
hasCurrentUserId: !!currentUserId,
isAck: _isAck,
});
}
// 6. 如果是当前活动会话,自动标记已读
@@ -766,11 +719,6 @@ class MessageManager {
const conversation = this.state.conversations.get(conversationId);
if (conversation) {
console.log('[MessageManager][DEBUG] updateConversationWithNewMessage - 更新前:', {
conversationId,
prevUnreadCount: conversation.unread_count,
conversationRef: conversation,
});
// 更新现有会话
const updatedConv: ConversationResponse = {
@@ -783,13 +731,6 @@ class MessageManager {
this.state.conversations.set(conversationId, updatedConv);
console.log('[MessageManager][DEBUG] updateConversationWithNewMessage - 更新后:', {
conversationId,
newUnreadCount: updatedConv.unread_count,
updatedConvRef: updatedConv,
conversationInMap: this.state.conversations.get(conversationId),
isSameRef: updatedConv === this.state.conversations.get(conversationId),
});
} else {
// 新会话,需要获取详情
// 异步获取会话详情
@@ -812,14 +753,12 @@ class MessageManager {
*/
private handleReadReceipt(message: WSReadMessage): void {
// 可以在这里处理对方已读的状态更新
console.log('[MessageManager] 处理已读回执:', message);
}
/**
* 处理群聊已读回执
*/
private handleGroupReadReceipt(message: WSGroupReadMessage): void {
console.log('[MessageManager] 处理群聊已读回执:', message);
}
/**
@@ -1001,12 +940,10 @@ class MessageManager {
*/
async fetchConversations(forceRefresh = false): Promise<void> {
if (this.state.isLoadingConversations && !forceRefresh) {
console.log('[MessageManager] 会话列表正在加载中,跳过');
return;
}
this.state.isLoadingConversations = true;
console.log('[MessageManager] 获取会话列表');
try {
const response = await messageService.getConversations(1, 20, forceRefresh);
@@ -1022,12 +959,6 @@ class MessageManager {
// 如果服务器返回的 unread_count > 0但本地有更晚的已读记录则保留本地状态
const shouldPreserveLocalRead = conv.unread_count > 0;
if (shouldPreserveLocalRead) {
console.log('[MessageManager] fetchConversations 保护已读状态:', {
conversationId: conv.id,
serverUnread: conv.unread_count,
readTimestamp: readRecord.timestamp,
version: readRecord.version,
});
this.state.conversations.set(conv.id, { ...conv, unread_count: 0 });
} else {
this.state.conversations.set(conv.id, conv);
@@ -1056,10 +987,6 @@ class MessageManager {
}
}
console.log('[MessageManager] 会话列表获取完成:', {
count: conversations.length,
totalUnread,
});
// 通知更新
this.notifySubscribers({
@@ -1134,12 +1061,10 @@ class MessageManager {
async fetchMessages(conversationId: string, afterSeq?: number): Promise<void> {
// 防止重复加载
if (this.state.loadingMessagesSet.has(conversationId)) {
console.log('[MessageManager] 消息正在加载中,跳过:', conversationId);
return;
}
this.state.loadingMessagesSet.add(conversationId);
console.log('[MessageManager][DEBUG] 获取消息开始:', { conversationId, afterSeq, currentConversationId: this.state.currentConversationId, timestamp: Date.now() });
try {
const mergeMessages = (base: MessageResponse[], incoming: MessageResponse[]): MessageResponse[] => {
@@ -1163,7 +1088,6 @@ class MessageManager {
console.warn('[MessageManager] 读取本地消息失败,回退到服务端同步:', error);
}
console.log('[MessageManager] 本地消息:', { count: localMessages.length, maxSeq: localMaxSeq });
if (localMessages.length > 0) {
// 转换格式
@@ -1179,7 +1103,6 @@ class MessageManager {
// 立即更新内存和通知(关键:解决竞态条件)
this.state.messagesMap.set(conversationId, formattedMessages);
console.log('[MessageManager][DEBUG] 本地消息已加载,通知订阅者:', { conversationId, messageCount: formattedMessages.length, timestamp: Date.now() });
this.notifySubscribers({
type: 'messages_updated',
payload: {
@@ -1283,7 +1206,6 @@ class MessageManager {
// 2.2 再基于 localMaxSeq 做增量补齐(防止快照窗口不足导致漏更老的新消息)
const snapshotMaxSeq = snapshotMessages.reduce((max, m) => Math.max(max, m.seq || 0), 0);
if (snapshotMaxSeq > localMaxSeq) {
console.log('[MessageManager] 增量补齐:', { localMaxSeq, snapshotMaxSeq });
const incrementalResp = await messageService.getMessages(conversationId, localMaxSeq);
const newMessages = incrementalResp?.messages || [];
if (newMessages.length > 0) {
@@ -1378,7 +1300,6 @@ class MessageManager {
* 加载更多历史消息
*/
async loadMoreMessages(conversationId: string, beforeSeq: number, limit = 20): Promise<MessageResponse[]> {
console.log('[MessageManager] 加载更多历史消息:', { conversationId, beforeSeq, limit });
try {
// 先从本地获取
@@ -1468,10 +1389,6 @@ class MessageManager {
this.state.totalUnreadCount = unreadData?.total_unread_count ?? 0;
this.state.systemUnreadCount = systemUnreadData?.unread_count ?? 0;
console.log('[MessageManager] 未读数更新:', {
total: this.state.totalUnreadCount,
system: this.state.systemUnreadCount,
});
this.notifySubscribers({
type: 'unread_count_updated',
@@ -1496,7 +1413,6 @@ class MessageManager {
segments: MessageSegment[],
options?: { replyToId?: string }
): Promise<MessageResponse | null> {
console.log('[MessageManager] 发送消息:', { conversationId, segmentCount: segments.length });
try {
// 调用API发送
@@ -1583,7 +1499,6 @@ class MessageManager {
* 3. fetchConversations 使用版本号判断数据新旧
*/
async markAsRead(conversationId: string, seq: number): Promise<void> {
console.log('[MessageManager] 标记已读:', { conversationId, seq });
const conversation = this.state.conversations.get(conversationId);
if (!conversation) {
@@ -1596,11 +1511,6 @@ class MessageManager {
// 使用 seq 去重:同一会话若已上报到更大/相同 seq则跳过重复上报
if (existingRecord && seq <= existingRecord.lastReadSeq) {
console.log('[MessageManager] 已读seq未前进跳过重复上报:', {
conversationId,
seq,
lastReadSeq: existingRecord.lastReadSeq,
});
return;
}
@@ -1620,7 +1530,6 @@ class MessageManager {
version: currentVersion,
lastReadSeq: seq,
});
console.log('[MessageManager] 已读保护开始:', { conversationId, version: currentVersion });
// 2. 乐观更新本地状态立即反映到UI
const updatedConv: ConversationResponse = {
@@ -1663,7 +1572,6 @@ class MessageManager {
// 5. 调用 API完成后设置延迟清除保护
try {
await messageService.markAsRead(conversationId, seq);
console.log('[MessageManager] 标记已读API调用成功:', { conversationId, version: currentVersion });
} catch (error) {
console.error('[MessageManager] 标记已读API失败:', error);
// 失败时回滚状态
@@ -1692,7 +1600,6 @@ class MessageManager {
// 只有版本号匹配时才清除(防止清除新的已读请求的保护)
if (record && record.version === currentVersion) {
this.pendingReadMap.delete(conversationId);
console.log('[MessageManager] 已读保护结束:', { conversationId, version: currentVersion });
}
}, READ_STATE_PROTECTION_DELAY);
@@ -1709,7 +1616,6 @@ class MessageManager {
* 标记所有消息已读
*/
async markAllAsRead(): Promise<void> {
console.log('[MessageManager] 标记所有已读');
// 乐观更新
const prevConversations = new Map(this.state.conversations);
@@ -1766,7 +1672,6 @@ class MessageManager {
* 创建私聊会话
*/
async createConversation(userId: string): Promise<ConversationResponse | null> {
console.log('[MessageManager] 创建私聊会话:', userId);
try {
const conversation = await messageService.createConversation(userId);
@@ -1860,7 +1765,6 @@ class MessageManager {
* 设置系统消息未读数
*/
setSystemUnreadCount(count: number): void {
console.log('[MessageManager] 设置系统未读数:', count);
this.state.systemUnreadCount = count;
this.notifySubscribers({
@@ -1878,7 +1782,6 @@ class MessageManager {
*/
incrementSystemUnreadCount(): void {
this.state.systemUnreadCount += 1;
console.log('[MessageManager] 系统未读数增加:', this.state.systemUnreadCount);
this.notifySubscribers({
type: 'unread_count_updated',
@@ -1895,7 +1798,6 @@ class MessageManager {
*/
decrementSystemUnreadCount(count = 1): void {
this.state.systemUnreadCount = Math.max(0, this.state.systemUnreadCount - count);
console.log('[MessageManager] 系统未读数减少:', this.state.systemUnreadCount);
this.notifySubscribers({
type: 'unread_count_updated',
@@ -1953,7 +1855,6 @@ class MessageManager {
* 清空会话列表
*/
clearConversations(): void {
console.log('[MessageManager] 清空会话列表');
this.state.conversations.clear();
this.state.conversationList = [];
this.state.totalUnreadCount = 0;
@@ -1980,7 +1881,6 @@ class MessageManager {
* 实际 MessageManager 使用内存状态,此方法用于兼容性
*/
invalidateCache(type: 'all' | 'list' | 'unread' = 'all'): void {
console.log('[MessageManager] 使缓存失效:', type);
// MessageManager 不使用外部缓存,内存状态始终是最新的
// 此方法仅用于 API 兼容性
}
@@ -1994,14 +1894,6 @@ class MessageManager {
const prevUnreadCount = conversation.unread_count || 0;
const newUnreadCount = prevUnreadCount + 1;
console.log('[MessageManager][DEBUG] incrementUnreadCount:', {
conversationId,
prevUnreadCount,
newUnreadCount,
conversationRef: conversation,
conversationInMap: this.state.conversations.get(conversationId),
isSameRef: conversation === this.state.conversations.get(conversationId),
});
// 创建新对象而不是直接修改,确保状态一致性
const updatedConv: ConversationResponse = {
@@ -2095,7 +1987,6 @@ class MessageManager {
*/
setActiveConversation(conversationId: string | null): void {
const normalizedConversationId = conversationId ? this.normalizeConversationId(conversationId) : null;
console.log('[MessageManager] 设置活动会话:', normalizedConversationId);
this.state.currentConversationId = normalizedConversationId;
}
@@ -2157,7 +2048,6 @@ class MessageManager {
*/
subscribe(subscriber: MessageSubscriber): () => void {
this.state.subscribers.add(subscriber);
console.log('[MessageManager] 新订阅者,当前数量:', this.state.subscribers.size);
// 立即发送当前状态给新订阅者
subscriber({
@@ -2186,10 +2076,6 @@ class MessageManager {
if (this.state.currentConversationId) {
const currentMessages = this.state.messagesMap.get(this.state.currentConversationId);
if (currentMessages && currentMessages.length > 0) {
console.log('[MessageManager][DEBUG] 新订阅者,发送当前活动会话消息:', {
conversationId: this.state.currentConversationId,
messageCount: currentMessages.length,
});
subscriber({
type: 'messages_updated',
payload: {
@@ -2205,7 +2091,6 @@ class MessageManager {
// 返回取消订阅函数
return () => {
this.state.subscribers.delete(subscriber);
console.log('[MessageManager] 订阅者移除,当前数量:', this.state.subscribers.size);
};
}