Agora SDK 提供设置 SDK 的输出日志文件的功能,SDK 运行时产生的所有 log 将写入该文件。
Native 平台包括 Android、iOS、macOS 和 Windows 平台。
为保证输出的日志完整,我们建议在创建并初始化 RtcEngine 后,就调用 setLogFile
方法设置日志文件。
默认情况下,SDK 会生成 agorasdk.log
、agorasdk_1.log
、agorasdk_2.log
、agorasdk_3.log
、agorasdk_4.log
这 5 个日志文件。 每个文件的默认大小为 1024 KB。日志文件为 UTF-8 编码。最新的日志永远写在 agorasdk.log
中。agorasdk.log
写满后,SDK 会从 1-4 中删除修改时间最早的一个文件,然后将 agorasdk.log
重命名为该文件,并建立新的 agorasdk.log
写入最新的日志。
各平台默认的日志文件输出地址如下:
/storage/emulated/0/Android/data/<package name>/files/agorasdk.log
App Sandbox/Library/Caches/agorasdk.log
~/Library/Logs/agorasdk.log
App Sandbox/Library/Logs/agorasdk.log
,如 /Users/<username>/Library/Containers/<App Bundle Identifier>/Data/Library/Logs/agorasdk.log
~/Library/Logs/agorasdk.log
C:\Users\<user_name>\AppData\Local\Agora\<process_name>\agorasdk.log
你也可以通过 setLogFile
的 filePath
参数修改日志文件输出地址。
调用 setLogFilter
方法设置日志的输出等级。选择一个级别,你就可以看到在该级别及之前所有级别的日志信息。
按照输出日志最全到最少排列:
默认情况下,Agora SDK 会生成 5 个日志文件,每个文件默认大小为 1024 KB。如果希望增加日志文件大小,还可以调用 setLogFileSize
方法设置单个日志文件的大小。
// Java
// 将日志过滤器等级设置为 LOG_FILTER_DEBUG
engine.setLogFilter(LOG_FILTER_DEBUG);
// 获取在 SD 卡中的文件路径
// 获取时间戳
String ts = new SimpleDateFormat("yyyyMMdd").format(new Date());
String filepath = "/sdcard/" + ts + ".log";
File file = new File(filepath);
engine.setLogFile(filepath);
// Objective-C
// 将日志输出等级设置为 AgoraLogFilterDebug
[engine setLogFilter: AgoraLogFilterDebug];
// 获取当前目录
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
// 获取文件路径
// 获取时间戳
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateFormat:@"ddMMyyyyHHmm"];
NSDate *currentDate = [NSDate date];
NSString *dateString = [formatter stringFromDate:currentDate];
NSString *logFilePath = [NSString stringWithFormat:@"%@/%@.log", [paths objectAtIndex:0], dateString];
// 设置日志文件的默认地址
[engine setLogFile:logFilePath]
// C++
TCHAR szAppFolder[MAX_PATH] = { 0 };
SHGetFolderPath(NULL, CSIDL_APPDATA, NULL, 0, szAppFolder);
_tcscat(szAppFolder, _T("\\AppName\\"));
if (!PathFileExists(szAppFolder)){
// 如果没有目录,创建一个新目录
CreateDirectory(szAppFolder, NULL);
}
if (PathFileExists(szAppFolder)){
// 创建日志文件
TCHAR szFile[MAX_PATH] = { 0 };
SYSTEMTIME st = { 0 };
GetLocalTime(&st);
// 获取时间戳
_stprintf_s(szFile, _T("%s%d%02d%02d_%02d%02d%02d.log"), szAppFolder, st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond);
HANDLE hFile = CreateFile(szFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL);
if (INVALID_HANDLE_VALUE != hFile){
CloseHandle(hFile);
char logFullPath[MAX_PATH] = { 0 };
::WideCharToMultiByte(CP_UTF8, 0, szFile, -1, logFullPath, MAX_PATH, NULL, NULL);
RtcEngineParameters rep(*engine);
rep.setLogFile(logFullPath);
}
}
发生 crash 时会告知产生 crash 的堆栈信息。各平台获取堆栈信息的方法如下:
adb bugreport
命令在 Android 和 iOS 平台,如果你在 app 中集成了 Bugly,可以直接通过 Bugly 获取。
Android
iOS/macOS
Windows
Agora Web SDK 通过 enableLogUpload
方法将 SDK 的日志上传到 Agora 的服务器,通过 disableLogUpload
方法停止上传。
为保证输出的日志完整,我们建议在创建 Client 前就调用 enableLogUpload
方法开启日志上传服务。
你可以调用 setLogLevel
方法设置日志的输出等级。选择一个级别,你就可以看到在该级别及之前所有级别的日志信息。
按照输出日志最全到最少排列:
// Javascript
// 开启日志上传功能
AgoraRTC.Logger.enableLogUpload();
// 将日志输出级别设置为 INFO
AgoraRTC.Logger.setLogLevel(AgoraRTC.Logger.INFO);