How do I configure SDK device logging?
By default, the Swrve SDK performs native device logging on iOS (Console Logs), Android (Logcat) and Unity. If required, you can disable these logs. On Android and iOS, you can also change the default logging level.
Additionally, the Swrve Unity SDK creates a small delay of approximately 14 milliseconds (ms) when logging. This is a not a big issue, however it can cause some performance implications if you’re firing events and your app operates at a high speed (for example, 60 frames per second, as you only have 16ms per frame). This article explains how to disable SDK device logs for iOS, Android and Unity.
iOS
If using source code
To disable the console logs completely on iOS, add a constant called SWRVE_DISABLE_LOGS to the preprocessor macros under App Target > Build Settings > Preprocessing > Preprocessor Macros.
If using CocoaPods
Add the following code to your podfile and reinstall the pod.
post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= ['$(inherited)', 'SWRVE_DISABLE_LOGS=1'] end end end
If using Carthage
In the SwrveFrameworks project in the Carthage/Checkouts/swrve-ios-sdk/SwrveFrameworks folder, add a constant called SWRVE_DISABLE_LOGS to the preprocessor macros, and then run a Carthage build to update your main project.
Configure log level at runtime
As of iOS SDK 7.0.0, you can configure the runtime log level. Call [SwrveLogger setLogLevel:VERBOSE]
with any of the following SwrveLogLevel
enums:
- NONE
- ERROR
- WARNING
- VERBOSE
Android
You can disable the Logcat logs on Android via the SwrveConfig object you use to create the Swrve instance. To disable the logs, call config.setLoggingEnabled(false)
and include it in the SwrveSDK.createInstance
method.
To set the logging level, call SwrveLogger.setLogLevel(logLevel)
.
Alternatively, to set the logging level using adb, run the following command:
adb shell setprop log.tag.SwrveSDK <loglevel>
For example, to change the logging level to DEBUG:
adb shell setprop log.tag.SwrveSDK DEBUG
Log levels supported:
- VERBOSE
- DEBUG
- INFO
- WARN
- ERROR
To get the current logging level on a device, run the following adb command:
adb shell getprop log.tag.SwrveSDK
To use your own custom Timber Tree with Swrve and manage output to Logcat yourself, call SwrveLogger.useCustomLogger(true)
so the SwrveLogger Tree does not get planted. This means you will see all Swrve logging regardless of log level for SwrveSDK. You can filter these by implementing Timber.Tree.isLoggable(String tag, int priority)
. For example, the code below filters out all Swrve logging less than WARNING level:
protected static class CustomTree extends Timber.DebugTree { @Override protected boolean isLoggable(String tag, int priority) { return !tag.equals(SwrveLogger.LOG_TAG) || (tag.equals(SwrveLogger.LOG_TAG) && priority > Log.WARN); } }
Unity
This log does not affect release builds. To disable the Swrve SDK logging in your app, set the logging level to disabled.
SwrveLog.Level = SwrveLog.LogLevel.Disabled;