浏览代码

refactor(logging): 统一日志记录机制并优化HiCar状态检测

- 移除直接调用Logger的冗余代码,统一通过ServerLogUtil记录日志
- 新增多个logXxx方法用于分类记录不同模块的日志信息
- 优化HiCar显示状态判断逻辑,提高可读性和维护性
- 更新Uploader中的User-Agent字段值
- 增强Logger类功能,支持按关键词过滤转发日志到服务端
- 在多个页面和组件中替换原有日志调用方式,确保日志一致性
- 修复EntryAbility中重复设置HiCar状态的问题
- 添加网盘账户操作相关的详细日志记录点
- 清理无用的import语句和调试代码
- 改进错误处理流程,在日志中包含更详细的错误信息
chendeben 8 月之前
父节点
当前提交
ffce14f877

+ 0 - 1
entry/src/main/ets/common/network/NavidromeApi.ets

@@ -291,7 +291,6 @@ export class NavidromeApi {
       return body;
     } catch (error) {
       const err = error as Error;
-      Logger.error(TAG, `Navidrome 请求失败: ${err.message}`);
       void ServerLogUtil.error(TAG, `${endpoint} 异常: ${err.message}`);
       throw err;
     } finally {

+ 0 - 2
entry/src/main/ets/common/network/NavidromeRestApi.ets

@@ -1,6 +1,5 @@
 import { http } from '@kit.NetworkKit';
 import { WebDavAccount } from '../../viewmodel/WebDavAccount';
-import Logger from '../util/Logger';
 import { ServerLogUtil } from '../util/ServerLogUtil';
 
 const TAG = 'heanup NavidromeRestApi';
@@ -203,7 +202,6 @@ export class NavidromeRestApi {
       };
     } catch (error) {
       const err = error as Error;
-      Logger.error(TAG, `Navidrome 登录异常: ${err.message}`);
       void ServerLogUtil.error(TAG, `登录异常: ${err.message}`);
       throw err;
     } finally {

+ 1 - 1
entry/src/main/ets/common/network/Uploader.ets

@@ -114,7 +114,7 @@ export class Uploader {
         header: {
           'Content-Type': 'application/octet-stream',
           'Authorization': `UpToken ${config.uploadToken}`,
-          'User-Agent': 'TTMusic-LogCollector/1.0'
+          'User-Agent': 'MZXJ/1.0'
         },
         extraData: contentBase64
       }

+ 44 - 1
entry/src/main/ets/common/util/Logger.ets

@@ -14,6 +14,10 @@
  */
 
 import { hilog } from '@kit.PerformanceAnalysisKit';
+import { ServerLogUtil } from './ServerLogUtil';
+
+type LogLevel = 'debug' | 'info' | 'warn' | 'error';
+const SERVER_LOG_KEYWORDS: Array<string> = ['webdav', 'remotedrive', 'account', 'navidrome', 'upload'];
 
 class Logger {
   private domain: number;
@@ -33,19 +37,58 @@ class Logger {
 
   debug(...args: string[]): void {
     hilog.debug(this.domain, this.prefix, this.format, args);
+    this.forwardToServerLog('debug', args);
   }
 
   info(...args: string[]): void {
     hilog.info(this.domain, this.prefix, this.format, args);
+    this.forwardToServerLog('info', args);
   }
 
   warn(...args: string[]): void {
     hilog.warn(this.domain, this.prefix, this.format, args);
+    this.forwardToServerLog('warn', args);
   }
 
   error(...args: string[]): void {
     hilog.error(this.domain, this.prefix, this.format, args);
+    this.forwardToServerLog('error', args);
+  }
+
+  private forwardToServerLog(level: LogLevel, args: string[]): void {
+    if (!args || args.length < 2) {
+      return;
+    }
+    const tag = args.length > 0 ? args[0] : '';
+    if (!tag || !this.shouldForward(tag)) {
+      return;
+    }
+    const normalizedMessage = args.slice(1).map(item => `${item ?? ''}`).join(' ').trim();
+    if (normalizedMessage.length === 0) {
+      return;
+    }
+    switch (level) {
+      case 'debug':
+        void ServerLogUtil.debug(tag, normalizedMessage);
+        break;
+      case 'info':
+        void ServerLogUtil.info(tag, normalizedMessage);
+        break;
+      case 'warn':
+        void ServerLogUtil.warn(tag, normalizedMessage);
+        break;
+      case 'error':
+        void ServerLogUtil.error(tag, normalizedMessage);
+        break;
+      default:
+        break;
+    }
+  }
+
+  private shouldForward(tag: string): boolean {
+    const lower = tag.toLowerCase();
+    return SERVER_LOG_KEYWORDS.some(keyword => lower.includes(keyword));
   }
 }
 
-export default new Logger('VideoPlayer', 0xFF00)
+export default new Logger('VideoPlayer', 0xFF00)

+ 0 - 3
entry/src/main/ets/common/util/RemoteDriveManager.ets

@@ -1078,7 +1078,6 @@ export class RemoteDriveManager {
         return info;
       });
       this.webDavSongs = [];
-      Logger.info(TAG, `从Navidrome获取到 ${artists.length} 位艺术家`);
       void ServerLogUtil.info(TAG, `获取艺术家列表,数量: ${artists.length}`);
       void ServerLogUtil.debug(TAG, `artists ids: ${artists.map(a => a.id).join(',')}`)
       return;
@@ -1094,7 +1093,6 @@ export class RemoteDriveManager {
         return info;
       });
       this.webDavSongs = [];
-      Logger.info(TAG, `Navidrome 艺术家 ${detail.name} 包含 ${detail.albums.length} 张专辑`);
       void ServerLogUtil.info(TAG, `进入艺术家 ${detail.name},专辑数: ${detail.albums.length}`);
       void ServerLogUtil.debug(TAG, `artist albums: ${detail.albums.map(a => a.id).join(',')}`)
       return;
@@ -1109,7 +1107,6 @@ export class RemoteDriveManager {
         detail.coverArt ?? (detail.id ? `al-${detail.id}` : undefined));
       this.webDavSongs = detail.songs.map(song => this.buildNavidromeVideoItem(song, account, detail, albumCoverUrl));
       await this.enrichSongsWithDatabase(this.webDavSongs);
-      Logger.info(TAG, `Navidrome 专辑 ${detail.name} 包含 ${detail.songs.length} 首歌曲`);
       void ServerLogUtil.info(TAG, `进入专辑 ${detail.name},歌曲数: ${detail.songs.length}`);
       void ServerLogUtil.debug(TAG, `album songs ids: ${detail.songs.map(s => s.id).join(',')}`)
       return;

+ 63 - 15
entry/src/main/ets/entryability/EntryAbility.ets

@@ -28,6 +28,7 @@ import { SpiderMan } from '@simplepeng/spider-man';
 import { smartMobilityCommon } from '@kit.CarKit';
 import { url } from '@kit.ArkTS';
 import { display } from '@kit.ArkUI';
+import { ServerLogUtil } from '../common/util/ServerLogUtil';
 
 /**
  * 主Ability类,继承自UIAbility
@@ -88,11 +89,10 @@ export default class EntryAbility extends UIAbility {
     onDisplayIdChange=(displayId: number)=> {
         let curDisplay = display.getDisplayByIdSync(displayId);
         console.info('twocold curDisplay 2 = '+curDisplay.name);
-        if(curDisplay.name =='HiCar'||curDisplay.name =='SuperLauncher'){
-            AppStorage.setOrCreate('curDisplayIsHiCar', true);
-        }else{
-            AppStorage.setOrCreate('curDisplayIsHiCar', false);
-        }
+        this.logHiCar('info', `displayIdChange: id=${displayId}, name=${curDisplay.name}`);
+        const isHiCarDisplay = curDisplay.name =='HiCar'||curDisplay.name =='SuperLauncher';
+        AppStorage.setOrCreate('curDisplayIsHiCar', isHiCarDisplay);
+        this.logHiCar('info', `curDisplayIsHiCar=${isHiCarDisplay}`);
     }
 
     async onCreate(want:Want, launchParam:AbilityConstant.LaunchParam) {
@@ -123,7 +123,7 @@ export default class EntryAbility extends UIAbility {
      */
     private async initWebDAV() {
         try {
-            Logger.info('heanup EntryAbility', '开始初始化WebDAV管理器');
+            this.logNetDisk('info', '开始初始化WebDAV管理器');
 
             // 1. 初始化DataBaseUtil
             const DataBaseUtil = (await import('../common/util/DataBaseUtil')).DataBaseUtil;
@@ -147,9 +147,10 @@ export default class EntryAbility extends UIAbility {
             // 6. 加载历史数据(如果有迁移需求)
             await webdavManager.loadInfo();
 
-            Logger.info('heanup EntryAbility', 'WebDAV管理器初始化成功');
+            this.logNetDisk('info', 'WebDAV管理器初始化成功');
         } catch (error) {
-            Logger.error('heanup EntryAbility', `WebDAV管理器初始化失败: ${error}`);
+            const errMessage = error instanceof Error ? error.message : String(error);
+            this.logNetDisk('error', `WebDAV管理器初始化失败: ${errMessage}`);
         }
     }
 
@@ -250,11 +251,10 @@ export default class EntryAbility extends UIAbility {
 
             let curDisplay = display.getDisplayByIdSync(windowClass.getWindowProperties().displayId);
             console.info('twocold curDisplay = '+curDisplay.name);
-            if(curDisplay.name =='HiCar'||curDisplay.name =='SuperLauncher'){
-                AppStorage.setOrCreate('curDisplayIsHiCar', true);
-            }else{
-                AppStorage.setOrCreate('curDisplayIsHiCar', false);
-            }
+            this.logHiCar('info', `mainWindow display: id=${windowClass.getWindowProperties().displayId}, name=${curDisplay.name}`);
+            const isHiCarDisplay = curDisplay.name =='HiCar'||curDisplay.name =='SuperLauncher';
+            AppStorage.setOrCreate('curDisplayIsHiCar', isHiCarDisplay);
+            this.logHiCar('info', `curDisplayIsHiCar=${isHiCarDisplay}`);
 
             windowClass.setWindowLayoutFullScreen(true).then(() => {
                 console.info('Succeeded in setting the window layout to full-screen mode.');
@@ -340,32 +340,41 @@ export default class EntryAbility extends UIAbility {
     getHiCarStatus(){
         try {
             if (!this.awareness){
-                this.awareness=canIUse("SystemCapability.CarService.DistributedEngine")?smartMobilityCommon.getSmartMobilityAwareness():undefined;
+                const canUseCarService = canIUse("SystemCapability.CarService.DistributedEngine");
+                this.awareness=canUseCarService?smartMobilityCommon.getSmartMobilityAwareness():undefined;
+                this.logHiCar('info', `init awareness: canUse=${canUseCarService}, created=${!!this.awareness}`);
             }
             console.log('enter getHiCarStatus,awareness:'+JSON.stringify(this.awareness));
+            this.logHiCar('debug', `getHiCarStatus awareness=${JSON.stringify(this.awareness)}`);
             if(this.awareness){
 
 
                 console.log('enter awareness');
+                this.logHiCar('info', 'start query HiCar status');
                 // 业务类型
                 let types: smartMobilityCommon.SmartMobilityType[] = [smartMobilityCommon.SmartMobilityType.HICAR];
                 // 获取出行业务连接状态
                 let info = this.awareness.getSmartMobilityStatus(types[0]);
-
+                this.logHiCar('debug', `current status info=${JSON.stringify(info)}`);
                 hilog.info(0x0000, 'getHiCarStatus  info: ', JSON.stringify(info));
                 if(info&&info.status==1){
                     AppStorage.setOrCreate('isHiCarStatus', true);
+                    this.logHiCar('info', 'HiCar connected, set isHiCarStatus=true');
                 }else{
                     AppStorage.setOrCreate('isHiCarStatus', false);
+                    this.logHiCar('info', 'HiCar disconnected, set isHiCarStatus=false');
                 }
 
                 // 出行连接状态回调函数
                 const callBack = (info: smartMobilityCommon.SmartMobilityInfo) => {
                     hilog.info(0x0000, 'getHiCarStatus Received smart mobility info: ', JSON.stringify(info));
+                    this.logHiCar('info', `receive smartMobilityStatus: ${JSON.stringify(info)}`);
                     if(info&&info.status==1){
                         AppStorage.setOrCreate('isHiCarStatus', true);
+                        this.logHiCar('info', 'HiCar status -> connected');
                     }else{
                         AppStorage.setOrCreate('isHiCarStatus', false);
+                        this.logHiCar('warn', 'HiCar status -> disconnected, pause playback');
                         const eventData: emitter.EventData = {};
                         emitter.emit({ eventId: EventConstants.EVENT_PLAY_PAUSE }, eventData); // 发送广播通知更新doSwipBack
                     }
@@ -377,9 +386,11 @@ export default class EntryAbility extends UIAbility {
 
             }else{
                 AppStorage.setOrCreate('isHiCarStatus', false);
+                this.logHiCar('warn', 'SmartMobilityAwareness unavailable, fallback isHiCarStatus=false');
             }
         }catch (error) {
             console.error(`Failed to getHiCarStatus: ${error.code}, message: ${error.message}`);
+            this.logHiCar('error', `getHiCarStatus failed: ${JSON.stringify(error)}`);
 
         }
 
@@ -392,4 +403,41 @@ export default class EntryAbility extends UIAbility {
         emitter.emit({ eventId: EventConstants.EVENT_SETTING_UPDATE }, eventData); // 发送广播通知更新doSwipBack
     }
 
+    private logHiCar(level: 'info' | 'warn' | 'error' | 'debug', message: string) {
+        const tag = 'HiCarStatus';
+        switch (level) {
+            case 'info':
+                void ServerLogUtil.info(tag, message);
+                break;
+            case 'warn':
+                void ServerLogUtil.warn(tag, message);
+                break;
+            case 'error':
+                void ServerLogUtil.error(tag, message);
+                break;
+            case 'debug':
+                void ServerLogUtil.debug(tag, message);
+                break;
+            default:
+                break;
+        }
+    }
+
+    private logNetDisk(level: 'info' | 'warn' | 'error', message: string) {
+        const tag = 'NetDiskInit';
+        switch (level) {
+            case 'info':
+                void ServerLogUtil.info(tag, message);
+                break;
+            case 'warn':
+                void ServerLogUtil.warn(tag, message);
+                break;
+            case 'error':
+                void ServerLogUtil.error(tag, message);
+                break;
+            default:
+                break;
+        }
+    }
+
 }

+ 53 - 2
entry/src/main/ets/pages/NewIndex.ets

@@ -53,6 +53,7 @@ import ReqPermissionUtil from '../common/util/ReqPermissionUtil';
 import { getRemoteDriveAccountLabel, getRemoteDriveDisplayLabel, getRemoteDriveProtocolLabel } from '../common/util/RemoteDriveLabel';
 import { RemoteDriveType } from '../common/enums/RemoteDriveType';
 import { NavidromePage } from '../view/NavidromePage';
+import { ServerLogUtil } from '../common/util/ServerLogUtil';
 
 // import { FFmpeg, FFProgressMessageParser } from '@sj/ffmpeg';
 
@@ -309,7 +310,7 @@ struct NewIndex {
 
     });
 
-    console.log('getHiCarStatus isHiCarStatus:' + this.isHiCarStatus)
+    this.logHiCar('info', `getHiCarStatus isHiCarStatus=${this.isHiCarStatus}`)
     if(this.isHiCarStatus||this.isBigScreen()){
       this.getUIContext()?.animateTo({ duration: 555 }, () => {
         this.isShowDrawer = true
@@ -1442,9 +1443,11 @@ struct NewIndex {
               // 重新加载网盘账户列表
               await this.loadWebDavAccounts()
               LogUtil.info('heanup NewIndex', '网盘账户删除成功:', account.name)
+              this.logAccount('info', `网盘账户删除成功: ${account.name}`)
             } catch (error) {
               LogUtil.error('heanup NewIndex', `删除网盘账户失败: ${(error as Error).message}`)
               ToastUtil.showToast('删除失败')
+              this.logAccount('error', `删除网盘账户失败: ${(error as Error).message}`)
             }
           }
         }
@@ -1452,6 +1455,7 @@ struct NewIndex {
     } catch (error) {
       LogUtil.error('heanup NewIndex', `删除网盘账户操作失败: ${(error as Error).message}`)
       ToastUtil.showToast('操作失败')
+      this.logAccount('error', `删除网盘账户操作失败: ${(error as Error).message}`)
     }
   }
 
@@ -1582,6 +1586,40 @@ struct NewIndex {
   /**
    * 初始化WebDAV管理器
    */
+  private logAccount(level: 'info' | 'warn' | 'error', message: string) {
+    const tag = 'AccountCenter';
+    switch (level) {
+      case 'info':
+        void ServerLogUtil.info(tag, message);
+        break;
+      case 'warn':
+        void ServerLogUtil.warn(tag, message);
+        break;
+      case 'error':
+        void ServerLogUtil.error(tag, message);
+        break;
+      default:
+        break;
+    }
+  }
+
+  private logHiCar(level: 'info' | 'warn' | 'error', message: string) {
+    const tag = 'HiCarEntry';
+    switch (level) {
+      case 'info':
+        void ServerLogUtil.info(tag, message);
+        break;
+      case 'warn':
+        void ServerLogUtil.warn(tag, message);
+        break;
+      case 'error':
+        void ServerLogUtil.error(tag, message);
+        break;
+      default:
+        break;
+    }
+  }
+
   async initWebDavManager() {
     try {
       // 设置WebDAV管理器的上下文
@@ -1593,6 +1631,7 @@ struct NewIndex {
       // 订阅WebDAV管理器事件
       this.webdavManager.subscribe((event: string) => {
         LogUtil.info('heanup NewIndex', '收到WebDAV事件:', event)
+        this.logAccount('info', `收到WebDAV事件: ${event}`)
         if (event === 'QueryAccountsSucceed') {
           this.webDavAccounts = this.webdavManager.getAllWebDavAccounts().slice()
         }
@@ -1602,8 +1641,10 @@ struct NewIndex {
       // await this.loadWebDavAccounts()
 
       LogUtil.info('heanup NewIndex', 'WebDAV管理器初始化成功')
+      this.logAccount('info', 'WebDAV管理器初始化成功')
     } catch (error) {
       LogUtil.error('heanup NewIndex', `初始化WebDAV管理器失败: ${(error as Error).message}`)
+      this.logAccount('error', `初始化WebDAV管理器失败: ${(error as Error).message}`)
     }
   }
 
@@ -1613,14 +1654,17 @@ struct NewIndex {
   async loadWebDavAccounts() {
     try {
       LogUtil.info('heanup NewIndex', '开始加载网盘账户列表')
+      this.logAccount('info', '开始加载网盘账户列表')
       await this.webdavManager.queryWebDavAccountsFromDB()
       // 强制触发UI更新
       this.webDavAccounts = this.webdavManager.getAllWebDavAccounts().slice()
       this.isRefreshing = false
       LogUtil.info('heanup NewIndex', `成功加载 ${this.webDavAccounts.length} 个网盘账户`)
+      this.logAccount('info', `成功加载 ${this.webDavAccounts.length} 个网盘账户`)
     } catch (error) {
       this.isRefreshing = false
       LogUtil.error('heanup NewIndex', `加载网盘账户列表失败: ${(error as Error).message}`)
+      this.logAccount('error', `加载网盘账户列表失败: ${(error as Error).message}`)
     }
   }
 
@@ -1630,6 +1674,7 @@ struct NewIndex {
   selectWebDavAccount(account: WebDavAccount) {
     try {
       LogUtil.info('heanup NewIndex', '选择网盘账户:', account.name)
+      this.logAccount('info', `选择网盘账户: ${account.name} (id=${account.id ?? 'unknown'})`)
       // 如果账户未激活,先激活它
       if (!account.isActivate) {
         // 先将所有账户设为未激活
@@ -1642,11 +1687,12 @@ struct NewIndex {
         // 更新数据库中的激活状态
         this.webdavManager.editAccount(account).then(() => {
           LogUtil.info('heanup NewIndex', '网盘账户编辑成功:', account.name)
-
+          this.logAccount('info', `网盘账户编辑成功: ${account.name}`)
 
         }).catch((error: Error) => {
           LogUtil.error('heanup NewIndex', `编辑网盘账户失败: ${error.message}`)
           ToastUtil.showToast('编辑账户失败')
+          this.logAccount('error', `编辑网盘账户失败: ${error.message}`)
         })
       }
       this.selectedAccount = account
@@ -1661,6 +1707,7 @@ struct NewIndex {
     } catch (error) {
       LogUtil.error('heanup NewIndex', `选择网盘账户失败: ${(error as Error).message}`)
       ToastUtil.showToast('选择账户失败')
+      this.logAccount('error', `选择网盘账户失败: ${(error as Error).message}`)
     }
   }
 
@@ -1704,9 +1751,11 @@ struct NewIndex {
              // 重新加载网盘账户列表,观察着模式去更新了,所以这里不需要更新,先注释掉
              // this.loadWebDavAccounts()
              LogUtil.info('heanup NewIndex', '网盘账户修改成功:', account.name)
+             this.logAccount('info', `网盘账户修改成功: ${account.name}`)
            }).catch((error: Error) => {
              LogUtil.error('heanup NewIndex', `修改网盘账户失败: ${error.message}`)
              ToastUtil.showToast('修改失败')
+             this.logAccount('error', `修改网盘账户失败: ${error.message}`)
            })
          } else {
            // 添加模式:创建新账户
@@ -1734,9 +1783,11 @@ struct NewIndex {
              // 重新加载网盘账户列表 观察着模式去更新了,所以这里不需要更新,先注释掉
              // this.loadWebDavAccounts()
              LogUtil.info('heanup NewIndex', '网盘账户添加成功:', account.name)
+             this.logAccount('info', `网盘账户添加成功: ${account.name}`)
            }).catch((error: Error) => {
              LogUtil.error('heanup NewIndex', `添加网盘账户失败: ${error.message}`)
              ToastUtil.showToast('添加失败')
+             this.logAccount('error', `添加网盘账户失败: ${error.message}`)
            })
          }
        }

+ 27 - 1
entry/src/main/ets/pages/SettingPage.ets

@@ -25,6 +25,7 @@ import { RemoteDriveManager } from '../common/util/RemoteDriveManager';
 import { LogCollector } from '../common/util/LogCollector';
 import { Uploader, UploadConfig } from '../common/network/Uploader';
 import { UpTokenUtil } from '../common/util/UpTokenUtil';
+import { ServerLogUtil } from '../common/util/ServerLogUtil';
 
 @Preview
 // @Entry
@@ -370,23 +371,48 @@ export struct SettingPage {
     context.getApplicationContext().setColorMode(colorMode)
   }
 
+  private logNetDisk(level: 'info' | 'warn' | 'error', message: string) {
+    const tag = 'NetDiskSetting';
+    switch (level) {
+      case 'info':
+        void ServerLogUtil.info(tag, message);
+        break;
+      case 'warn':
+        void ServerLogUtil.warn(tag, message);
+        break;
+      case 'error':
+        void ServerLogUtil.error(tag, message);
+        break;
+      default:
+        break;
+    }
+  }
+
   private handleClearWebDavCache() {
     if (this.isClearingCache) {
       return;
     }
     this.isClearingCache = true;
     const manager = RemoteDriveManager.getInstance();
-    const accountId = manager?.currentAccount?.id;
+    const account = manager?.currentAccount;
+    const accountId = account?.id;
     const clearPromise = accountId !== undefined
       ? clearWebDavCacheByAccount(accountId)
       : clearWebDavCaches();
+    const target = accountId !== undefined && account
+      ? ServerLogUtil.sanitizeAccount(account)
+      : 'all-accounts';
+    this.logNetDisk('info', `开始清除网盘缓存: target=${target}`);
     clearPromise.then(() => {
       ToastUtil.showToast('已清除网盘缓存');
+      this.logNetDisk('info', `清除网盘缓存成功: target=${target}`);
     }).catch((error: Error) => {
       hilog.error(0, 'SettingPage', `清除网盘缓存失败: ${error.message}`);
       ToastUtil.showToast('清除失败,请稍后重试');
+      this.logNetDisk('error', `清除网盘缓存失败: target=${target}, err=${error.message}`);
     }).finally(() => {
       this.isClearingCache = false;
+      this.logNetDisk('info', `网盘缓存清理结束: target=${target}`);
     });
   }
 

+ 16 - 13
entry/src/main/ets/view/LocalMusic.ets

@@ -129,6 +129,11 @@ import { GlobalAlphabetIndexerModifier } from '../Styels/GlobalStyles'
 import { getFirstLetter } from '../Constants';
 
 const TAG = 'LocalMusic';
+const HICAR_LOG_TAG = 'HiCarWindow';
+
+function logHiCarWindow(message: string): void {
+  void ServerLogUtil.info(HICAR_LOG_TAG, message);
+}
 
 /**
  * 歌单播放事件数据
@@ -509,13 +514,11 @@ async function setVideoUrlForSong(song: VideoItem, options?: MetadataExtractionO
       }
       const navSongId = song.remote_rel_path || song.id || song.filePath;
       const streamUrl = await navidromeApi.buildStreamUrl(account, navSongId);
-      Logger.info(TAG, `Navidrome 流地址构建成功: ${streamUrl}`);
       void ServerLogUtil.info(TAG, `流地址构建成功: ${streamUrl}`);
       void ServerLogUtil.debug(TAG, `播放songId=${navSongId}, account=${ServerLogUtil.sanitizeAccount(account)}`);
       return sanitizePlaybackUrl(streamUrl);
     } catch (error) {
       const err = error as Error;
-      Logger.error(TAG, `Navidrome URL构建失败: ${err.message}`);
       void ServerLogUtil.error(TAG, `URL构建失败: ${err.message}`);
       throw new Error(err.message);
     }
@@ -9438,10 +9441,10 @@ export struct LocalMusic {
   isPhoneLan() {
     // LogUtil.info('twocold this.currentHeightBreakpoint = '+this.currentHeightBreakpoint)
     // LogUtil.info('twocold this.currentWidthBreakpoint = '+this.currentWidthBreakpoint)
-    LogUtil.info('hicar isPhoneLan width= ' + this.windowWidth);
-    LogUtil.info('hicar isPhoneLan height= ' + this.windowHeight);
-    LogUtil.info(`twocold  hicarWindow size: ${this.windowWidth}x${this.windowHeight}, this.isHiCarStatus: ${this.isHiCarStatus}`);
-    LogUtil.info(`twocold  hicar Window size: ${this.windowWidth}x${this.windowHeight}, isHiCarSmall: ${this.isHiCarSmall()}`);
+    logHiCarWindow(`isPhoneLan width=${this.windowWidth}`);
+    logHiCarWindow(`isPhoneLan height=${this.windowHeight}`);
+    logHiCarWindow(`window size: ${this.windowWidth}x${this.windowHeight}, isHiCarStatus=${this.isHiCarStatus}`);
+    logHiCarWindow(`window size: ${this.windowWidth}x${this.windowHeight}, isHiCarSmall=${this.isHiCarSmall()}`);
     if (this.isHiCarKuanBianPing()) {
       return true
     }
@@ -9470,11 +9473,11 @@ export struct LocalMusic {
     ];
     const currentRatio: number = this.windowWidth / this.windowHeight;
     const RATIO_TOLERANCE: number = 0.22; // 宽高比容差
-    LogUtil.info('twocold isHiCarKuanBianPing currentRatio = ' + currentRatio)
+    logHiCarWindow(`HiCarKuanBianPing currentRatio=${currentRatio}`)
 
     for (const hiCarRatio of hiCarAspectRatios) {
-      LogUtil.info('twocold isHiCarKuanBianPing hiCarRatio= ' + hiCarRatio.ratio)
-      LogUtil.info('twocold isHiCarKuanBianPing Math.abs(currentRatio - hiCarRatio.ratio)= ' + Math.abs(currentRatio - hiCarRatio.ratio))
+      logHiCarWindow(`HiCarKuanBianPing hiCarRatio=${hiCarRatio.ratio}`)
+      logHiCarWindow(`HiCarKuanBianPing diff=${Math.abs(currentRatio - hiCarRatio.ratio)}`)
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
         //宽扁平的尺寸设置列表展示
@@ -9507,12 +9510,12 @@ export struct LocalMusic {
     ];
     const currentRatio: number = this.windowWidth / this.windowHeight;
     const RATIO_TOLERANCE: number = 0.22; // 宽高比容差
-    LogUtil.info('twocold isHiCarSmall currentRatio = ' + currentRatio)
+    logHiCarWindow(`HiCarSmall currentRatio=${currentRatio}`)
 
     for (const hiCarRatio of hiCarAspectRatios) {
-      LogUtil.info('twocold isHiCarSmall hiCarRatio= ' + hiCarRatio.ratio)
-      LogUtil.info('twocold isHiCarSmall Math.abs(currentRatio - hiCarRatio.ratio)= ' + Math.abs(currentRatio - hiCarRatio.ratio))
-      LogUtil.info('twocold isHiCarSmall isHiCarStatus= ' + this.isHiCarStatus);
+      logHiCarWindow(`HiCarSmall hiCarRatio=${hiCarRatio.ratio}`)
+      logHiCarWindow(`HiCarSmall diff=${Math.abs(currentRatio - hiCarRatio.ratio)}`)
+      logHiCarWindow(`HiCarSmall isHiCarStatus=${this.isHiCarStatus}`);
       if (Math.abs(currentRatio - hiCarRatio.ratio) <= RATIO_TOLERANCE) {
         // LogUtil.info(`HiCar detected: ${hiCarRatio.name}, actual: ${this.windowWidth}x${this.windowHeight}`);
         //宽扁平的尺寸设置列表展示

+ 0 - 12
entry/src/main/ets/view/NavidromePage.ets

@@ -220,7 +220,6 @@ export struct NavidromePage {
       });
 
       // 记录最终加载结果
-      Logger.info('heanup', `Navidrome 已加载: 歌曲 ${songs.length} 首, 艺术家 ${artistList.length} 位, 专辑 ${albumList.length} 张`);
       void ServerLogUtil.info('NavidromeLoad', `数据转换完成: 歌曲 ${songs.length} -> VideoItem ${videos.length}`);
       void ServerLogUtil.info('NavidromePage', `加载完成: 歌曲 ${songs.length} / 艺术家 ${artistList.length} / 专辑 ${albumList.length}`);
       void ServerLogUtil.debug('NavidromePage', `歌曲ID列表: ${songs.slice(0, 50).map(s => s.id).join(',')}${songs.length > 50 ? '...' : ''}`);
@@ -230,7 +229,6 @@ export struct NavidromePage {
 
     } catch (error) {
       if (ticket === this.loadTicket) {
-        Logger.error('heanup', `Navidrome 数据加载失败: ${(error as Error).message}`);
         void ServerLogUtil.error('NavidromeLoad', `数据加载失败: ${(error as Error).message}`);
         void ServerLogUtil.error('NavidromeLoad', `失败时服务器信息: ${ServerLogUtil.sanitizeAccount(account)}`);
         ToastUtil.showToast((error as Error).message ?? 'Navidrome 数据加载失败');
@@ -278,7 +276,6 @@ export struct NavidromePage {
           }
         } catch (error) {
           failedCoverCount++;
-          Logger.warn('heanup', `Navidrome 专辑封面解析失败: ${(error as Error).message}`);
           void ServerLogUtil.warn('AlbumCover', `专辑 ${album.name} 封面解析失败: ${(error as Error).message}`);
         }
       })());
@@ -325,7 +322,6 @@ export struct NavidromePage {
           }
         } catch (error) {
           failedCoverCount++;
-          Logger.warn('heanup', `Navidrome 艺术家封面解析失败: ${(error as Error).message}`);
           void ServerLogUtil.warn('ArtistCover', `艺术家 ${artist.name} 封面解析失败: ${(error as Error).message}`);
         }
       })());
@@ -353,7 +349,6 @@ export struct NavidromePage {
           try {
             coverUrl = await this.resolveSongCover(song, account, albumCoverMap);
           } catch (error) {
-            Logger.warn('heanup', `Navidrome 单曲封面解析失败: ${(error as Error).message}`);
             void ServerLogUtil.warn('SongConvert', `歌曲 ${song.title} 封面解析失败: ${(error as Error).message}`);
           }
 
@@ -1108,7 +1103,6 @@ export struct NavidromePage {
   }
 
   private applyFilter(type: NavFilterType, id: string, label: string): void {
-    Logger.info('heanup', `应用筛选: type=${type}, id=${id}, label=${label}`);
 
     // 记录筛选操作
     void ServerLogUtil.info('NavidromeFilter', `应用筛选:`);
@@ -1128,10 +1122,7 @@ export struct NavidromePage {
 
     // 调试日志:检查筛选结果
     const visibleSongs = this.getVisibleSongs();
-    Logger.info('heanup', `筛选后歌曲数量: ${visibleSongs.length}, 总歌曲数: ${this.allVideos.length}`);
     if (visibleSongs.length > 0) {
-      Logger.info('heanup', `第一首歌: ${visibleSongs[0].name}, albumId=${visibleSongs[0].navAlbumId}, album=${visibleSongs[0].album}`);
-
       // 记录筛选结果详情
       void ServerLogUtil.info('NavidromeFilter', `筛选结果统计:`);
       void ServerLogUtil.info('NavidromeFilter', `- 筛选后歌曲数: ${visibleSongs.length}`);
@@ -1167,7 +1158,6 @@ export struct NavidromePage {
       }
 
       // 记录播放详细信息
-      Logger.info('heanup', `Navidrome 播放歌曲: ${song.name}, 索引: ${index}`);
       void ServerLogUtil.info('NavidromePlay', `开始播放歌曲: ${song.name} (#${index})`);
       void ServerLogUtil.info('NavidromePlay', `歌曲信息:`);
       void ServerLogUtil.info('NavidromePlay', `- ID: ${song.id}`);
@@ -1197,7 +1187,6 @@ export struct NavidromePage {
       const eventPlaylistPlay: emitter.InnerEvent = { eventId: EventConstants.EVENT_PLAYLIST_PLAY };
       emitter.emit(eventPlaylistPlay, { data: playlistData });
 
-      Logger.info('heanup', `Navidrome 发送播放事件,歌曲数: ${this.allVideos.length}, 起始: ${index}`);
       void ServerLogUtil.info('NavidromePlay', `播放事件已发送`);
       void ServerLogUtil.debug('NavidromePlay', `播放事件详情: 列表ID=${playlistData.playlistId}, 列表名称=${playlistData.playlistName}, 歌曲数=${playlistData.songCount}, 起始索引=${playlistData.startIndex}, 是否跳转=${playlistData.isJump}`);
 
@@ -1211,7 +1200,6 @@ export struct NavidromePage {
 
     } catch (error) {
       const err = error as Error;
-      Logger.error('heanup', '播放歌曲失败: ' + err.message);
       void ServerLogUtil.error('NavidromePlay', `播放失败: ${err.message}`);
       void ServerLogUtil.error('NavidromePlay', `失败歌曲信息: ${song.name} (${song.id})`);
       ToastUtil.showToast('播放失败');