常见问题

产品 / 插件
平台 / 框架

Express 如何设置和获取 SDK 的日志、堆栈信息?

产品 / 插件:实时音视频 / 实时语音 / 低延迟直播 / 畅直播

平台 / 框架:iOS / Android / macOS / Windows / Web / Flutter

更新时间:2022-11-04 15:04


Native 平台

Native 平台主要指 Android、iOS、macOS 和 Windows 平台。

设置日志属性

默认情况下,SDK 会生成以 “zegoavlog” 开头的 TXT 日志文件,最多生成 3 个,文件名以序号 “1”、“2”、“3” 结尾。单个日志文件默认大小上限为 5MB (5 * 1024 * 1024 Bytes),3 个日志文件写满后,会删除修改时间最早的一个日志文件。

各平台默认的存储路径为:

  • Android:“/storage/Android/data/[应用包名]/files”
  • iOS:“~/Library/Caches/ZegoLogs”
  • macOS:
    • 沙箱:“~/Library/Containers/[应用包名 Bundle ID]/Data/Library/Caches/ZegoLogs”
    • 非沙箱:“~/Library/Caches/ZegoLogs”
  • Windows:“C:\用户\当前用户名\AppData[应用包名]ZEGO.SDK\ZegoLogs”

开发者也可以设置 ZegoLogConfig 属性,包括日志的存储路径 “logPath” 和日志文件大小上限 “logSize”,调用 setLogConfig 接口自定义 SDK 的日志属性。

必须在调用 createEngine 之前,调用 setLogConfig 接口设置日志的属性才生效,若在 createEngine 之后设置,则在 destroyEngine 后的下一次 createEngine 时生效。

Android

以设置日志存储路径为 “/data/user/0/包名/files”,单个日志文件大小上限为 5MB 为例:

ZegoLogConfig logConfig;
// 设置日志存储路径
logConfig.logPath = getApplicationContext().getFilesDir().getAbsolutePath();
// 设置单个日志文件大小上限
logConfig.logSize = 5242880L;
engine.setLogConfig(logConfig);

API 参考:ZegoLogConfigsetLogConfig

iOS/macOS

以设置日志存储路径为 “[[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:@"/ZegoLogs"]”,单个日志文件大小上限为 5MB 为例:

// 设置日志存储路径
NSString *appLogPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingString:@"/ZegoLogs"];
ZegoLogConfig *logConfig = [[ZegoLogConfig alloc] init];
logConfig.logPath = appLogPath;
// 设置单个日志文件大小上限
logConfig.logSize = 5 * 1024 * 1024;
[ZegoExpressEngine setLogConfig:logConfig];

API 参考:

Windows

以设置日志存储路径为 “/Users/zego/Log/log.txt”,单个日志文件大小上限为 5MB 为例:

ZegoLogConfig logConfig;
// 设置日志存储路径
logConfig.logPath = "/Users/zego/Log/log.txt";
// 设置单个日志文件大小上限
logConfig.logSize = 5242880L;
ZegoExpressSDK::setLogConfig(logConfig);

API 参考:ZegoLogConfigsetLogConfig

获取日志信息

Android、iOS、macOS、Windows 平台根据以下方式,可获取 SDK 的日志信息。

以下获取日志的路径皆以 SDK 的默认路径为例,如果开发者自定义了日志文件的存储路径,请到对应的路径下获取。

  • Android

    “/storage/Android/data/[应用包名]/files” 路径下,以 “zegoavlog” 开头的 TXT 文件为日志信息。

  • iOS/iPadOS

    1. 将 iOS 设备连接到 Mac,打开 Xcode,顶部菜单栏选择 “Window > Devices and Simulators”。

      xcode_device_window_menu

    2. 在左侧选择指定设备,然后在 “INSTALLED APPS” 中找到需要取日志的 App, 单击下方齿轮图标,选择 “Download Container...” 并保存。

    3. 打开“访达”找到保存的 “.xcappdata” 文件,右键选择 “显示包内容”, 选择 “AppData/Library/Caches/ZegoLogs” 目录,以 “zegoavlog” 开头的 TXT 文件为日志信息。

  • macOS

    • 沙箱:“~/Library/Containers/[应用包名 Bundle ID]/Data/Library/Caches/ZegoLogs” 路径下,以 “zegoavlog” 开头的 TXT 文件为日志信息。

    • 非沙箱:“~/Library/Caches/ZegoLogs” 路径下,以 “zegoavlog” 开头的 TXT 文件为日志信息。

  • Windows

    日志文件夹的命名为:“程序的进程名字” + “ZEGO.SDK”。 在 “我的电脑” 路径下直接输入 “%APPDATA%” 并回车,即可定位到日志文件夹存放目录。以 “zegoavlog” 开头的 TXT 文件为日志信息。

获取堆栈信息

发生崩溃时,SDK 会产生崩溃的堆栈信息,Android、iOS、macOS 平台根据以下方式,可获取 SDK 的堆栈信息。

  • Android

    • 实时分析日志

      adb logcat | ndk-stack -sym [目标 abi (armeabi/armeabi-v7a/arm64-v8a) 的 so 动态库所在的目录]

      例如:

      adb logcat | ndk-stack -sym /path/to/your/project/armeabi-v7a

    • 先获取日志再分析 (用 adb logcat 保存日志文件,再通过 ndk-stack 命令分析)

      adb logcat > xx.log

      ndk-stack -sym [目标 abi 的 so 动态库所在的目录] -dump [日志文件]

      例如:

      adb logcat > crash.log

      ndk-stack -sym /path/to/your/project/armeabi-v7a -dump crash.log

  • iOS/iPadOS

    1. 将 iOS 设备连接到 Mac,打开 Xcode,顶部菜单栏选择 “Window > Devices and Simulators”。
    2. 在左侧选择指定设备,然后单击 “View Device Logs”,找到 Process 对应的应用包名,并且 Type 为 Crash 的对应时间的日志,右键单击此条日志并选择 “Export Log”,保存的 “.crash” 文件为堆栈信息。
  • macOS

    “~/Library/Logs/DiagnosticReports” 路径下,以 “.crash” 结尾的文件为堆栈信息。

Web 平台

Web 平台默认开启日志上报功能。

ZEGO 推荐开发者使用默认日志配置信息,如有特殊需求,可参考以下说明设置日志输出等级。

设置日志输出等级

调用 setLogConfig 接口,通过 ZegoLogConfig 对象中的 “logLevel” 属性设置本地控制台打印的日志级别。

属性 含义 日志级别
logLevel
本地控制台日志级别
  • debug
  • info
  • warn
  • error
  • report
  • disable
以上级别从上至下依次递增,等级越高打印日志越少。
const config = {
    logLevel: 'debug',
};
zg.setLogConfig(config);