Logger

Logger

The mParticle SDK does all of its logging through a custom interface called a log handler. The default implementation of this interface is to log the message through the native Android Log class, but this behavior is simple to override if you want mParticle logs piped somewhere else. There are 6 log severity levels defined in the SDK:

  • LogLevel.Info
  • LogLevel.Verbose
  • LogLevel.Debug
  • LogLevel.Warning
  • LogLevel.Error
  • LogLevel.None

The log handler interface, AbstractLogHandler defines a method for each level of severity, other than LogLevel.None, which will receive a callback when the SDK generates a log for the corresponding severity level

abstract void verbose(Throwable error, String message);
abstract void info(Throwable error, String message);
abstract void debug(Throwable error, String message);
abstract void warning(Throwable error, String message);
abstract void error(Throwable error, String message);

To create your own custom log handler, extend AbstractLogHandler, and implement each method with your own logging behavior. If you would like to only implement a subset of these methods, you should extend our default implementation, DefaultLogHandler.

Once you have implemented your log handler, register it using Logger.setLogHandler(AbstractLogHandler). Currently, only 1 log handler can be set at a time, so when you register your log handler, it replaces the default logging behavior.

Logs generated by the SDK are first filtered against the SDK’s minimum log level, then by the system minimum log level. If it passes both, the AbstractLogHandler callback will be invoked. The SDK’s minimum log value can be set either by including it in the MParticleOptions instance you use to start the SDK via the MParticleOptions.Builder.logLevel(LogLevel) method, or by setting it directly on the SDK via MParticle.setLogLevel(LogLevel). If you do not explicitly set a log level, the default level is always LogLevel.Debug

The system’s minimum log level is based on the adb properties values. It is possible to set minimum log levels per tags via adb. For example, if you set a restriction via adb that the minimum logging level for tag “MParticle” is DEBUG (adb setprop log.tag.MParticle DEBUG), the AbstractLogHandler’s verbose() and info() methods will not be invoked since they represent a log severity lower than DEBUG. It is possible to override the system minimum log level filtering behavior, but this is not recommended. You can do so in your AbstractLogHandler implementation by overriding the isADBLoggable(String message, int logLevel) method.

Full example

Logger.AbstractLogHandler customHandler = new Logger.DefaultLogHandler() {
	@Override
 	public void verbose(Throwable error, String message) {
 		System.out.println(message);
 	}

 	@Override
 	public void info(Throwable error, String message) {
 		System.out.println(message);
 	}

 	@Override
 	public void debug(Throwable error, String message) {
 		System.out.println(message);
 	}

 	@Override
 	public void warning(Throwable error, String message) {
 		System.out.println(message);
 	}

 	@Override
 	public void error(Throwable error, String message) {
 		throw new RuntimeException(error);
 	}
};
Logger.setLogHandler(customHandler);
val customHandler: Logger.AbstractLogHandler = object : Logger.DefaultLogHandler() {
 	override fun verbose(error: Throwable, message: String) = println(message)
 	override fun info(error: Throwable, message: String) = println(message)
 	override fun debug(error: Throwable, message: String) = println(message)
 	override fun warning(error: Throwable, message: String) = println(message)
 	override fun error(error: Throwable, message: String) {
 		throw RuntimeException(error)
 	}
}
Logger.setLogHandler(customHandler)

Was this page helpful?