Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
# Changelog

## Unreleased

### Features

- Send logcat through Sentry Logs ([#4487](https://github.com/getsentry/sentry-java/pull/4487))
- Enable the Logs feature in your `SentryOptions` or with the `io.sentry.logs.enabled` manifest option and the SDK will automatically send logcat logs to Sentry, if the Sentry Android Gradle plugin is applied.

## 8.13.3

### Fixes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,12 @@

import android.util.Log;
import io.sentry.Breadcrumb;
import io.sentry.ScopesAdapter;
import io.sentry.Sentry;
import io.sentry.SentryLevel;
import io.sentry.SentryLogLevel;
import java.io.PrintWriter;
import java.io.StringWriter;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
Expand Down Expand Up @@ -44,73 +48,104 @@ private static void addAsBreadcrumb(
Sentry.addBreadcrumb(breadcrumb);
}

private static void addAsLog(
Comment thread
stefanosiano marked this conversation as resolved.
@NotNull final SentryLogLevel level,
@Nullable final String msg,
@Nullable final Throwable tr) {
final @NotNull ScopesAdapter scopes = ScopesAdapter.getInstance();
if (tr == null) {
scopes.logger().log(level, msg);
} else {
StringWriter sw = new StringWriter(256);
Comment thread
stefanosiano marked this conversation as resolved.
Outdated
PrintWriter pw = new PrintWriter(sw, false);
tr.printStackTrace(pw);
Comment thread
stefanosiano marked this conversation as resolved.
Outdated
pw.flush();
scopes.logger().log(level, msg != null ? (msg + "\n" + sw.toString()) : sw.toString());
pw.close();
}
}

public static int v(@Nullable String tag, @Nullable String msg) {
addAsBreadcrumb(tag, SentryLevel.DEBUG, msg);
addAsLog(SentryLogLevel.TRACE, msg, null);
return Log.v(tag, msg);
}

public static int v(@Nullable String tag, @Nullable String msg, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.DEBUG, msg, tr);
addAsLog(SentryLogLevel.TRACE, msg, tr);
return Log.v(tag, msg, tr);
}

public static int d(@Nullable String tag, @Nullable String msg) {
addAsBreadcrumb(tag, SentryLevel.DEBUG, msg);
addAsLog(SentryLogLevel.DEBUG, msg, null);
return Log.d(tag, msg);
}

public static int d(@Nullable String tag, @Nullable String msg, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.DEBUG, msg, tr);
addAsLog(SentryLogLevel.DEBUG, msg, tr);
return Log.d(tag, msg, tr);
}

public static int i(@Nullable String tag, @Nullable String msg) {
addAsBreadcrumb(tag, SentryLevel.INFO, msg);
addAsLog(SentryLogLevel.INFO, msg, null);
return Log.i(tag, msg);
}

public static int i(@Nullable String tag, @Nullable String msg, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.INFO, msg, tr);
addAsLog(SentryLogLevel.INFO, msg, tr);
return Log.i(tag, msg, tr);
}

public static int w(@Nullable String tag, @Nullable String msg) {
addAsBreadcrumb(tag, SentryLevel.WARNING, msg);
addAsLog(SentryLogLevel.WARN, msg, null);
return Log.w(tag, msg);
}

public static int w(@Nullable String tag, @Nullable String msg, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.WARNING, msg, tr);
addAsLog(SentryLogLevel.WARN, msg, tr);
return Log.w(tag, msg, tr);
}

public static int w(@Nullable String tag, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.WARNING, tr);
addAsLog(SentryLogLevel.WARN, null, tr);
return Log.w(tag, tr);
}

public static int e(@Nullable String tag, @Nullable String msg) {
addAsBreadcrumb(tag, SentryLevel.ERROR, msg);
addAsLog(SentryLogLevel.ERROR, msg, null);
return Log.e(tag, msg);
}

public static int e(@Nullable String tag, @Nullable String msg, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.ERROR, msg, tr);
addAsLog(SentryLogLevel.ERROR, msg, tr);
return Log.e(tag, msg, tr);
}

public static int wtf(@Nullable String tag, @Nullable String msg) {
addAsBreadcrumb(tag, SentryLevel.ERROR, msg);
addAsLog(SentryLogLevel.FATAL, msg, null);
Comment thread
stefanosiano marked this conversation as resolved.
return Log.wtf(tag, msg);
}

public static int wtf(@Nullable String tag, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.ERROR, tr);
addAsLog(SentryLogLevel.FATAL, null, tr);
return Log.wtf(tag, tr);
}

public static int wtf(@Nullable String tag, @Nullable String msg, @Nullable Throwable tr) {
addAsBreadcrumb(tag, SentryLevel.ERROR, msg, tr);
addAsLog(SentryLogLevel.FATAL, msg, tr);
return Log.wtf(tag, msg, tr);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -241,6 +241,9 @@ class InternalSentrySdkTest {
Sentry.configureScope { scope ->
assertEquals(3, scope.breadcrumbs.size)
}

// Ensure we don't interfere with other tests
Sentry.configureScope(ScopeType.GLOBAL) { scope -> scope.clear() }
}

@Test
Expand Down
Loading