Skip to content

Instantly share code, notes, and snippets.

@chonamdoo
Forked from wickedev/CrashlyticsTree.java
Created December 29, 2016 07:21
Show Gist options
  • Save chonamdoo/a78dff61d9e5ae00e42a33efd833a60b to your computer and use it in GitHub Desktop.
Save chonamdoo/a78dff61d9e5ae00e42a33efd833a60b to your computer and use it in GitHub Desktop.
package com.novonetworks.eng.core.util;
/*
* Created by orange on 2016-12-29.
*/
import android.util.Log;
import com.crashlytics.android.Crashlytics;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import timber.log.Timber;
public class CrashlyticsTree extends Timber.Tree {
private static final String CRASHLYTICS_KEY_PRIORITY = "priority";
private static final String CRASHLYTICS_KEY_TAG = "tag";
private static final String CRASHLYTICS_KEY_MESSAGE = "message";
private static final int CALL_STACK_INDEX = 6;
private static final Pattern ANONYMOUS_CLASS = Pattern.compile("(\\$\\d+)+$");
private String createStackElementTag(StackTraceElement element) {
String tag = element.getClassName();
Matcher m = ANONYMOUS_CLASS.matcher(tag);
if (m.find()) {
tag = m.replaceAll("");
}
return tag.substring(tag.lastIndexOf('.') + 1);
}
private String getClassNameTag() {
StackTraceElement[] stackTrace = new Throwable().getStackTrace();
if (stackTrace.length <= CALL_STACK_INDEX) {
throw new IllegalStateException(
"Synthetic stacktrace didn't have enough elements: are you using proguard?");
}
return createStackElementTag(stackTrace[CALL_STACK_INDEX]);
}
@Override
protected void log(int priority, String tag, String message, Throwable t) {
if (tag == null) {
tag = getClassNameTag();
}
Crashlytics.setInt(CRASHLYTICS_KEY_PRIORITY, priority);
Crashlytics.setString(CRASHLYTICS_KEY_TAG, tag);
Crashlytics.setString(CRASHLYTICS_KEY_MESSAGE, message);
if (priority == Log.VERBOSE || priority == Log.DEBUG || priority == Log.INFO) {
Crashlytics.log(priority, tag, message);
return;
}
if (t == null) {
Crashlytics.logException(new Exception(message));
} else {
Crashlytics.logException(t);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment