Configuring logging

Medallia Experience Orchestration SDK for Android provides an extensible logging configuration API for debug or reporting purposes. The API can be configured to log any combination of Components (features or technical concepts such as Networking or Databases) to log levels (Verbose, Debug, etc). In addition, custom log writers can be added to facilitate reporting if desired (ex. sending errors to Google Console).

Tip: We recommend the logging be enabled in the onCreate method of your project's Application class before the initialization of the SDK.

By default, the Medallia Experience Orchestration SDK for Android logs Error and Warn messages for Any component. Below are examples of other logging configurations.

Note: All Medallia Experience Orchestration SDK log messages will be prefixed with MedalliaMXO: in the console.

Turning all logs on

This is an example of configuring logging to Verbose log level for Any Components of the Medallia Experience Orchestration SDK.

Kotlin
Java
import com.medallia.mxo.logging.MXOLogComponent import com.medallia.mxo.logging.MXOLogLevel import com.medallia.mxo.mxoConfigureLogging mxoConfigureLogging { levels = setOf(MXOLogLevel.VERBOSE) components = setOf(MXOLogComponent.ANY) }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.logging.MXOLogComponent; import com.medallia.mxo.logging.MXOLogLevel; import com.medallia.mxo.logging.MXOLoggingConfiguration; MXOLoggingConfiguration mxoLoggingConfiguration = new MXOLoggingConfiguration.Builder() .log(MXOLogLevel.VERBOSE) .log(MXOLogComponent.ANY) .build(); MedalliaMXO.setLoggingConfiguration(mxoLoggingConfiguration);

When setting MXOLogComponent to only Any, all components will be logged in conjunction with the log level.

Turning specific logs on

This is an example of configuring logging to combination of Error and Warn levels for just Networking and Database components of the Medallia Experience Orchestration SDK.

Kotlin
Java
import com.medallia.mxo.logging.MXOLogComponent import com.medallia.mxo.logging.MXOLogLevel import com.medallia.mxo.mxoConfigureLogging mxoConfigureLogging { levels = MXOLogLevel.ERROR and MXOLogLevel.WARN components = MXOLogComponent.NETWORKING and MXOLogComponent.DATABASE }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.logging.MXOLogComponent; import com.medallia.mxo.logging.MXOLogLevel; import com.medallia.mxo.logging.MXOLoggingConfiguration; MXOLoggingConfiguration mxoLoggingConfiguration = new MXOLoggingConfiguration.Builder() .log(MXOLogLevel.ERROR) .log(MXOLogLevel.WARN) .log(MXOLogComponent.NETWORKING) .log(MXOLogComponent.DATABASE) .build(); MedalliaMXO.setLoggingConfiguration(mxoLoggingConfiguration);

When setting a single MXOLogLevel, the SDK will log any messages of that level and above. The order from the bottom is: Verbose, Debug, Error, Warn, Info, Assert.

Examples:

  • Setting Info will log only Info and Assert messages.
  • Setting Verbose will log all messages.

When setting multiple MXOLogLevel(s), the SDK will log only messages of those specific levels. As an example, setting Error and Warn will only log message of Error and Warn levels and nothing else.

Tip: Do not set multiple component(s) along side the Any component. Choose only the components required or just use Any.

Using a custom logger

This is an example of using a custom logger.

Kotlin
Java
import com.medallia.mxo.logging.MXOLogComponent import com.medallia.mxo.logging.MXOLogLevel import com.medallia.mxo.mxoConfigureLogging import com.medallia.mxo.logging.MXOLogWriter mxoConfigureLogging { levels = setOf(MXOLogLevel.VERBOSE) components = MXOLogComponent.NETWORKING and MXOLogComponent.DATABASE logWriters = setOf(CustomLogger()) } class CustomLogger : MXOLogWriter() { override fun log( logLevel: MXOLogLevel, component: MXOLogComponent, message: String, throwable: Throwable? ) { Log.d("CustomLogger", "Component: ${component.name}\nMessage: $message", throwable) } }import com.medallia.com.MedalliaMXO; import com.medallia.mxo.logging.MXOLogComponent; import com.medallia.mxo.logging.MXOLogLevel; import com.medallia.mxo.logging.MXOLoggingConfiguration; import com.medallia.mxo.logging.MXOLogWriter; MXOLoggingConfiguration mxoLoggingConfiguration = new MXOLoggingConfiguration.Builder() .log(MXOLogLevel.VERBOSE) .log(MXOLogComponent.NETWORKING) .log(MXOLogComponent.DATABASE) .logTo(new CustomLogger()) .build(); MedalliaMXO.setLoggingConfiguration(mxoLoggingConfiguration); static class CustomLogger implements MXOLogWriter { @Override public void log( @NonNull MXOLogLevel mxoLogLevel, @NonNull MXOLogComponent mxoLogComponent, @NonNull String s, @Nullable Throwable throwable ) { Log.d("Custom", s); } }

Turning logs for the MXO SDK initialization process on

The Medallia Experience Orchestration SDK performs initialization processes in an Android Content Provider which is instantiated before the Application is created. This means the log configuration API cannot be invoked before the Orchestration SDK has finished its initialization process. To turn on logging for the initialization process of the Orchestration SDK a meta data element must be added to the android manifest. If the metadata element is not set no logging is configured.

Metadata Info:

name : com.medallia.mxo.InitLogLevel

value: Comma separated list of com.medallia.mxo.logging.MXOLogLevel

This is an example for logging Verbose and above logs.

<application> <!--Other application elements--> <meta-data android:name="com.medallia.mxo.InitLogLevel" android:value="VERBOSE" /> </application>

The com.medallia.mxo.InitLogLevel AndroidManifest.xml metadata value is only honored for the Medallia Experience Orchestration SDK initialization process. After initialization has finished, the logging configuration reverts to a default configuration mentioned above. If more logging is desired then use the logging configuration APIs to turn on logging as shown above.

Tip: We recommend including the above metadata only in Debug builds to ensure no unnecessary logging occurs in release. Therefore, only include this metadata in the Debug variant AndroidManifest.xml and not in the main AndroidManifest.xml. To learn more about how manifests are merged, see the Merge multiple manifest files.

Turning all logs off

This is an example of turning the Medallia Experience Orchestration logging off.

Kotlin
Java
import com.medallia.mxo.logging.MXOLogComponent import com.medallia.mxo.logging.MXOLogLevel import com.medallia.mxo.mxoConfigureLogging mxoConfigureLogging { levels = setOf(MXOLogLevel.NONE) components = setOf(MXOLogComponent.NONE) }import com.medallia.mxo.MedalliaMXO; import com.medallia.mxo.logging.MXOLogComponent; import com.medallia.mxo.logging.MXOLogLevel; import com.medallia.mxo.logging.MXOLoggingConfiguration; MXOLoggingConfiguration mxoLoggingConfiguration = new MXOLoggingConfiguration.Builder() .log(MXOLogLevel.NONE) .log(MXOLogComponent.NONE) .build(); MedalliaMXO.setLoggingConfiguration(mxoLoggingConfiguration);