-
-
Save chonamdoo/a78dff61d9e5ae00e42a33efd833a60b to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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