播放器 SDK 提供本地调试日志和远程日志回捞能力。本地调试用于开发阶段实时查看 Logcat,日志回捞用于根据服务端任务上传设备上指定时间范围内的 SDK 日志,便于排查问题。
自 TTSDK 1.52.1 版本起,播放器 SDK 升级了日志回捞能力。您可以根据应用所处阶段选择以下三种方案,灰度发布阶段强烈建议接入方案二,便于在收到用户反馈后获取问题发生时的日志。
适用于开发、内测阶段。您可以接入 SDK 的日志回调接口,自行将日志写入文件,并通过自有日志回捞平台收集日志。遇到疑似 SDK 问题时,将日志提供给火山引擎技术支持团队分析。
此方案需要您自行实现日志文件写入和回捞功能。
适用于灰度发布阶段。您可以通过 SDK 日志配置接口开启日志实时写入本地磁盘。收到用户反馈后,向火山引擎技术支持团队提供问题设备 ID。经您允许后,火山引擎通过自身的日志回捞平台获取并分析日志。
客户端持续写入日志可能带来一定的性能开销。为降低开销,SDK 先将日志写入内存映射文件(mmap),再异步落盘,避免频繁同步磁盘 I/O,对播放器性能的影响较小。
适用于应用全量运行阶段。收到用户反馈后,您可以向火山引擎技术支持团队提供问题设备 ID。经您允许后,火山引擎针对该设备下发配置,开启本地日志记录和回捞轮询,并通过自身的日志回捞平台获取并分析日志。
配置下发且设备使用应用后,日志记录和回捞才会生效,因此存在一定延迟,问题也可能不再复现,导致无法获取问题发生时的日志。
TTSDK 1.52.1 及以上版本支持通过 LogConfig 统一接入日志回捞。原有 Logcat 和日志监听接口继续保留,与日志回捞相互独立。
升级到 TTSDK 1.52.1 后,原有本地调试和日志监听接口无需迁移。如需远程日志回捞,在原有 Env.start() 初始化配置中增加 LogConfig 即可。
| 现有接入方式 | 升级说明 |
|---|---|
VodSDK.openAllVodLog() | 继续用于开发阶段输出全量 Logcat,不作为日志回捞开关。 |
各模块的 turnOn() | 按需保留,用于控制本地调试输出。 |
TTVideoEngineLog.setLogNotifyLevel() 和 TTVideoEngineLog.setListener() | 按需保留,应用设置的日志监听器不会被日志回捞覆盖。 |
| 未接入远程日志回捞 | 新增 Config.Builder.setLogConfig() 配置。 |
直接调用 VodALog.setLog() | 迁移到 Config.Builder.setLogConfig(),避免同时维护两套入口。 |
初始化播放器 SDK 之前,建议您先开启日志,便于调试和排查问题。
注意
本地全量调试日志建议仅在开发和问题复现阶段开启,线上版本请关闭全量 Logcat 输出,以减少性能开销。日志回捞无需调用 VodSDK.openAllVodLog(),可独立工作。
示例代码如下:
对于大多数调试场景,推荐使用以下方法一键开启 SDK 所有模块的日志。
VodSDK.openAllVodLog();
通过日志监听器可以获取实时日志。以下示例将日志输出到 Logcat;如果采用方案一,请在回调中接入您自己的日志文件写入和回捞逻辑。
开启日志后,参考以下步骤输出特定级别的日志到 Logcat:
(可选)设置日志级别:默认情况下,SDK 输出 LOG_INFO、LOG_WARN、LOG_ERROR 和 LOG_KILL 四个层级的日志。在开发和调试阶段,为了更高效地排查问题,建议您额外设置输出 LOG_DEBUG 级别的日志以获取更详尽的信息。
TTVideoEngineLog.setLogNotifyLevel(TTVideoEngineLog.LOG_DEBUG, 1);
(必须)设置日志输出监听器:建议在 Application 类的 onCreate 方法中或其他执行 SDK 初始化逻辑的早期阶段设置日志监听器,以确保能捕获从 SDK 初始化开始的全部日志。以下示例代码会将 Engine 生成的日志打印到 Android 的 Logcat。
// 将 Engine 日志输出到 Logcat TTVideoEngineLog.setListener(new TTVideoEngineLogListener() { @Override public void consoleLog(String log) { Log.d("TTVideoEngineLog", log); // 使用 Log.d 打印到 Logcat } });
TTSDK 1.52.1 及以上版本支持此功能。在首次调用 Env.start() 前创建 LogConfig,并通过 Config.Builder.setLogConfig() 传入日志配置。
import com.pandora.common.env.Env; import com.pandora.common.env.config.Config; import com.pandora.common.env.config.LogConfig; Context appContext = context.getApplicationContext(); LogConfig logConfig = new LogConfig.Builder(appContext) .setEnable(true) .build(); Config config = new Config.Builder() .setApplicationContext(appContext) .setAppID(appId) .setAppName(appName) .setAppVersion(appVersion) .setAppChannel(appChannel) .setAppRegion(appRegion) .setLicenseUri(licenseUri) .setLogConfig(logConfig) .build(); Env.start(config);
setEnable(true) 同时开启本地日志文件记录和服务端任务查询,setEnable(false) 同时关闭两者。开启后,SDK 先保存本地日志,仅在服务端下发匹配当前设备和时间范围的任务时上传日志。因此,开启日志回捞后未立即上传属于正常现象。
Android 日志回捞范围包括 Engine、Player、MDL 和 Playlist Cache,无需分别注册各模块的日志回捞回调。
如果仅使用默认配置,除 setEnable(true) 外无需设置其他参数。您也可以按需设置设备标识、日志路径、容量、保留时间和日志级别。
LogConfig logConfig = new LogConfig.Builder(appContext) .setEnable(true) .setDeviceID(deviceId) .setLogPath(logRootPath) .setMaxLogSizeM(100) .setSingleLogSizeM(2) .setLogExpireTimeS(7 * 24 * 60 * 60) .setLogLevel(LogConfig.LogLevel.Debug) .build();
| 接口 | 说明 |
|---|---|
setDeviceID(String) | 设置设备标识。未设置时使用 AppLog DID。 |
setLogPath(String) | 设置日志根目录。未设置时使用 SDK 默认目录。 |
setMaxLogSizeM(int) | 设置日志总容量上限,单位为 MB,默认值为 100。 |
setSingleLogSizeM(int) | 设置单个日志文件容量上限,单位为 MB,默认值为 2。 |
setLogExpireTimeS(int) | 设置日志保留时间,单位为秒,默认为 7 天。 |
setLogLevel(int) | 设置最低日志写入级别,使用 LogConfig.LogLevel 常量。可选值为 Verbose、Debug、Info、Warning、Error 和 None,其中 None 表示不写入新日志。 |
注意
setLogConfig()、日志路径、设备标识和容量等配置应在首次调用 Env.start() 前确定。初始化后,仅支持动态更新日志级别。