Skip to content

Commit f8ba72d

Browse files
committed
Introduce fatal SDK logger
1 parent 8185388 commit f8ba72d

File tree

6 files changed

+100
-2
lines changed

6 files changed

+100
-2
lines changed
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package io.sentry.android.core;
2+
3+
import android.util.Log;
4+
5+
import org.jetbrains.annotations.ApiStatus;
6+
import org.jetbrains.annotations.NotNull;
7+
import org.jetbrains.annotations.Nullable;
8+
9+
import io.sentry.ILogger;
10+
import io.sentry.SentryLevel;
11+
12+
@ApiStatus.Internal
13+
public final class AndroidFatalLogger implements ILogger {
14+
15+
private final @NotNull String tag;
16+
17+
public AndroidFatalLogger() {
18+
this("Sentry");
19+
}
20+
21+
public AndroidFatalLogger(final @NotNull String tag) {
22+
this.tag = tag;
23+
}
24+
25+
@SuppressWarnings("AnnotateFormatMethod")
26+
@Override
27+
public void log(
28+
final @NotNull SentryLevel level,
29+
final @NotNull String message,
30+
final @Nullable Object... args) {
31+
if (args == null || args.length == 0) {
32+
Log.println(toLogcatLevel(level), tag, message);
33+
} else {
34+
Log.println(toLogcatLevel(level), tag, String.format(message, args));
35+
}
36+
}
37+
38+
@SuppressWarnings("AnnotateFormatMethod")
39+
@Override
40+
public void log(
41+
final @NotNull SentryLevel level,
42+
final @Nullable Throwable throwable,
43+
final @NotNull String message,
44+
final @Nullable Object... args) {
45+
if (args == null || args.length == 0) {
46+
log(level, message, throwable);
47+
} else {
48+
log(level, String.format(message, args), throwable);
49+
}
50+
}
51+
52+
@Override
53+
public void log(
54+
final @NotNull SentryLevel level,
55+
final @NotNull String message,
56+
final @Nullable Throwable throwable) {
57+
Log.wtf(tag, message, throwable);
58+
}
59+
60+
@Override
61+
public boolean isEnabled(@Nullable SentryLevel level) {
62+
return true;
63+
}
64+
65+
private int toLogcatLevel(final @NotNull SentryLevel sentryLevel) {
66+
return Log.ASSERT;
67+
}
68+
}

sentry-android-core/src/main/java/io/sentry/android/core/AndroidOptionsInitializer.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ static void loadDefaultAndMetadataOptions(
110110

111111
// Firstly set the logger, if `debug=true` configured, logging can start asap.
112112
options.setLogger(logger);
113+
options.setFatalLogger(new AndroidFatalLogger());
113114

114115
options.setDefaultScopeType(ScopeType.CURRENT);
115116
options.setOpenTelemetryMode(SentryOpenTelemetryMode.OFF);

sentry/src/main/java/io/sentry/DefaultVersionDetector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ public DefaultVersionDetector(final @NotNull SentryOptions options) {
1414

1515
@Override
1616
public boolean checkForMixedVersions() {
17-
return SentryIntegrationPackageStorage.getInstance().checkForMixedVersions(options.getLogger());
17+
return SentryIntegrationPackageStorage.getInstance().checkForMixedVersions(options.getFatalLogger());
1818
}
1919
}

sentry/src/main/java/io/sentry/ManifestVersionDetector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ public ManifestVersionDetector(final @NotNull SentryOptions options) {
1616
@Override
1717
public boolean checkForMixedVersions() {
1818
ManifestVersionReader.getInstance().readManifestFiles();
19-
return SentryIntegrationPackageStorage.getInstance().checkForMixedVersions(options.getLogger());
19+
return SentryIntegrationPackageStorage.getInstance().checkForMixedVersions(options.getFatalLogger());
2020
}
2121
}

sentry/src/main/java/io/sentry/Sentry.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -292,6 +292,7 @@ private static void init(final @NotNull SentryOptions options, final boolean glo
292292
.getLogger()
293293
.log(SentryLevel.INFO, "GlobalHubMode: '%s'", String.valueOf(globalHubModeToUse));
294294
Sentry.globalHubMode = globalHubModeToUse;
295+
initFatalLogger(options);
295296
final boolean shouldInit =
296297
InitUtil.shouldInit(globalScope.getOptions(), options, isEnabled());
297298
if (shouldInit) {
@@ -392,6 +393,12 @@ private static void initLogger(final @NotNull SentryOptions options) {
392393
}
393394
}
394395

396+
private static void initFatalLogger(final @NotNull SentryOptions options) {
397+
if (options.getFatalLogger() instanceof NoOpLogger) {
398+
options.setFatalLogger(new SystemOutLogger());
399+
}
400+
}
401+
395402
private static void initScopesStorage(SentryOptions options) {
396403
getScopesStorage().close();
397404
if (SentryOpenTelemetryMode.OFF == options.getOpenTelemetryMode()) {

sentry/src/main/java/io/sentry/SentryOptions.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,8 @@ public class SentryOptions {
126126

127127
/** Logger interface to log useful debugging information if debug is enabled */
128128
private @NotNull ILogger logger = NoOpLogger.getInstance();
129+
@ApiStatus.Experimental
130+
private @NotNull ILogger fatalLogger = NoOpLogger.getInstance();
129131

130132
/** minimum LogLevel to be used if debug is enabled */
131133
private @NotNull SentryLevel diagnosticLevel = DEFAULT_DIAGNOSTIC_LEVEL;
@@ -646,6 +648,26 @@ public void setLogger(final @Nullable ILogger logger) {
646648
this.logger = (logger == null) ? NoOpLogger.getInstance() : new DiagnosticLogger(this, logger);
647649
}
648650

651+
/**
652+
* Returns the Logger interface for logging important SDK messages
653+
*
654+
* @return the logger for fatal SDK messages
655+
*/
656+
@ApiStatus.Experimental
657+
public @NotNull ILogger getFatalLogger() {
658+
return fatalLogger;
659+
}
660+
661+
/**
662+
* Sets the Logger interface for important SDK messages. If null, logger will be NoOp
663+
*
664+
* @param logger the logger for fatal SDK messages
665+
*/
666+
@ApiStatus.Experimental
667+
public void setFatalLogger(final @Nullable ILogger logger) {
668+
this.fatalLogger = (logger == null) ? NoOpLogger.getInstance() : logger;
669+
}
670+
649671
/**
650672
* Returns the minimum LogLevel
651673
*

0 commit comments

Comments
 (0)