# Procedure to collect logs from Zoom Video SDK apps Logging is very essential for Zoom Video SDK applications. It provides insights into the application flow and helps engineers debug issues. Zoom collects certain information from the data received on the backend server. However, this data does not contain information about the client-side application flow. When requests have not reached the backend, client-side logs are needed to understand the call stack. Zoom Video SDK supports the log feature, which can be useful for troubleshooting SDK issues. For safety and security concerns, the device logs are encrypted and can only be decrypted by only those who have access to decrypting tool. ⚠ **Warning:** Enabling debug logs occupies considerable amount of storage. Hence, it can be enabled on demand. Lets see how to enable and retrieve Zoom Video SDK logs in below platforms: - [Android](#android) - [iOS](#ios) - [Windows](#windows) - [Mac](#mac) - [Web](#web) --- ## Android ### Enable Video SDK log To enable video SDK log in Android, we should set the below parameter along with the **initialize** method. ```java ZoomVideoSDKInitParams params = new ZoomVideoSDKInitParams(); params.domain = Constants.WEB_DOMAIN; //========== params.enableLog = true; //========== . . ZoomVideoSDK.getInstance().initialize(this.getApplicationContext(), params); ``` ### Retrieve Video SDK log If the application is in production, we can write code to retrieve the log file and send it via email. If the application is in development environment, we can retrieve logs using "Device explorer" in Android Studio. **Path:** /sdcard/Android/data/[package name]/logs **File extension:** .log ## ![Android Explorer](/img/blog/ajithayasmin/androidvsdkexplorer.png) ## iOS ### Enable Video SDK log To enable video SDK log in iOS, we should set the "enableLog" parameter to "YES" and add it to the **initialize** method. ``` ZoomVideoSDKInitParams *context = [[ZoomVideoSDKInitParams alloc] init]; context.domain = kAppDomain; context.appGroupId = @"XXX" //========== context.enableLog = YES; //========== ZoomVideoSDKError ret = [[ZoomVideoSDK shareInstance] initialize:context]; ``` ### Retrieve Video SDK log If the application is in production, we can write code to retrieve the log file and send it via email. If the application is in development environment, we can retrieve logs using "Devices & Simulator" window. **Path:** sandbox/AppData/tmp **File extension:** .log ![iOS Explorer](/img/blog/ajithayasmin/iphonevsdkexplorer.png) Once the container is downloaded, right click on the file and select "Show Package Contents". It shall open the explorer window and you can navigate to AppData->tmp and retrieve the \*.log files. Starting with iOS 17, Apple introduced subtle changes in how temporary files are handled within exported app containers. As a result, you may no longer see the /tmp folder when inspecting the container contents. To work around this and retain the ability to collect sandbox logs, users can delete the …/Library/Caches folder. Developers can include logic in their app to perform this cleanup — for example, during app termination — so that it executes automatically each time the app exits. Below is a sample Objective-C code snippet demonstrating how to safely delete all contents of the Library/Caches directory: ``` // Delete all contents of Library/Caches safely NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; NSFileManager *fileManager = [NSFileManager defaultManager]; NSError *error = nil; NSArray *cacheFiles = [fileManager contentsOfDirectoryAtPath:cachePath error:&error]; if (error) { NSLog(@"Error reading cache directory: %@", error.localizedDescription); } else { for (NSString *file in cacheFiles) { NSString *filePath = [cachePath stringByAppendingPathComponent:file]; BOOL success = [fileManager removeItemAtPath:filePath error:&error]; if (!success || error) { NSLog(@"Failed to remove item at path %@: %@", filePath, error.localizedDescription); error = nil; // reset for next iteration } else { NSLog(@"Deleted %@", filePath); } } } ``` ### Retrieve crash dump To retrieve crash logs from iOS device, go to Settings > Privacy & Security > Analytics & Improvements > Analytics Data. From this location, select the "zoom" related crash file and open it. There will be a "Share" button in the top right corner to share the logs. --- ## Windows ### Enable Video SDK log To enable video SDK log in Windows, we should set the "enableLog" parameter to "true" along with the **Init** method. The default log size will be 5MB. ``` ZoomVideoSDKInitParams init_params; init_params.domain = _T("https://go.zoom.us"); //========== init_params.enableLog = true; init_params.logFilePrefix = _T("zoom_win_video_demo"); //========== . . ZoomVideoSDKMgr::GetInst().Init(this, init_params); ``` ### Retrieve Video SDK log Below is the path to retrieve the SDK log **Path:** %appdata%/zoomvideosdk/logs/ **File extension:** .log ### Retrieve crash dump SDK will generate dump files automatically, if needed, user could find the dump file in %appData%/zoomvideosdk/logs/ ## ![Windows Explorer](/img/blog/ajithayasmin/windowsvsdkexplorer.png) ## Mac ### Enable Video SDK log To enable video SDK log in Mac, we should set the "enableLog" parameter to "YES" along with the **initialize** method. The default log size will be 5MB ``` ZMVideoSDKInitParams* params = [[ZMVideoSDKInitParams alloc] init]; params.domain = ZOOM_VIDEO_SDK_DOMAIN; //========== params.enableLog = YES; params.logFilePrefix = @"ZoomSDK"; //========== . . [self.zoomVideoSDK initialize:params]; ``` ### Retrieve Video SDK log Below is the path to retrieve the SDK log **Path:** ~/Library/Logs/appName **File extension:** .log ### Retrieve crash dump **Path:** ~/Library/Logs/DiagnosticReports/(appName) ## ![Mac Explorer](/img/blog/ajithayasmin/macvsdkexplorer.png) ## Web ### Retrieve console log The "console.log" statements in the code shall be printed in the web console. To retrieve them, follow below steps: 1. Right click on the browser window->Inspect->Navigate to "console" tab 2. Right click on the "console" logs and select "Save as" and share the output file. ![Web Console](/img/blog/ajithayasmin/webconsole.png) ### Retrieve HAR log 1. Right click on the browser window->Inspect->Navigate to "network" tab 2. Select "All" and click on the "Download" button and share the output file. ![Web Console](/img/blog/ajithayasmin/webhar.png) Happy Coding!