Skip to content

Commit 1e23fdc

Browse files
authored
[Logs 8] Use a separate enum for SentryLogLevel (#4388)
* Add Log feature to Java SDK * Rate limit for log items * Add options for logs * Add batch processor for logs * Use a separate ExecutorService for log batching * Reduce locking when log event is created * Add system tests for Logs * Separate enum for SentryLogLevel
1 parent 6847e31 commit 1e23fdc

File tree

8 files changed

+97
-36
lines changed

8 files changed

+97
-36
lines changed

sentry/api/sentry.api

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3042,17 +3042,17 @@ public final class io/sentry/SentryLockReason$JsonKeys {
30423042
}
30433043

30443044
public final class io/sentry/SentryLogEvent : io/sentry/JsonSerializable, io/sentry/JsonUnknown {
3045-
public fun <init> (Lio/sentry/protocol/SentryId;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/SentryLevel;)V
3046-
public fun <init> (Lio/sentry/protocol/SentryId;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/SentryLevel;)V
3045+
public fun <init> (Lio/sentry/protocol/SentryId;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/SentryLogLevel;)V
3046+
public fun <init> (Lio/sentry/protocol/SentryId;Ljava/lang/Double;Ljava/lang/String;Lio/sentry/SentryLogLevel;)V
30473047
public fun getAttributes ()Ljava/util/Map;
30483048
public fun getBody ()Ljava/lang/String;
3049-
public fun getLevel ()Lio/sentry/SentryLevel;
3049+
public fun getLevel ()Lio/sentry/SentryLogLevel;
30503050
public fun getTimestamp ()Ljava/lang/Double;
30513051
public fun getUnknown ()Ljava/util/Map;
30523052
public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;)V
30533053
public fun setAttributes (Ljava/util/Map;)V
30543054
public fun setBody (Ljava/lang/String;)V
3055-
public fun setLevel (Lio/sentry/SentryLevel;)V
3055+
public fun setLevel (Lio/sentry/SentryLogLevel;)V
30563056
public fun setTimestamp (Ljava/lang/Double;)V
30573057
public fun setUnknown (Ljava/util/Map;)V
30583058
}
@@ -3110,6 +3110,25 @@ public final class io/sentry/SentryLogEvents$JsonKeys {
31103110
public fun <init> ()V
31113111
}
31123112

3113+
public final class io/sentry/SentryLogLevel : java/lang/Enum, io/sentry/JsonSerializable {
3114+
public static final field DEBUG Lio/sentry/SentryLogLevel;
3115+
public static final field ERROR Lio/sentry/SentryLogLevel;
3116+
public static final field FATAL Lio/sentry/SentryLogLevel;
3117+
public static final field INFO Lio/sentry/SentryLogLevel;
3118+
public static final field TRACE Lio/sentry/SentryLogLevel;
3119+
public static final field WARN Lio/sentry/SentryLogLevel;
3120+
public fun getSeverityNumber ()I
3121+
public fun serialize (Lio/sentry/ObjectWriter;Lio/sentry/ILogger;)V
3122+
public static fun valueOf (Ljava/lang/String;)Lio/sentry/SentryLogLevel;
3123+
public static fun values ()[Lio/sentry/SentryLogLevel;
3124+
}
3125+
3126+
public final class io/sentry/SentryLogLevel$Deserializer : io/sentry/JsonDeserializer {
3127+
public fun <init> ()V
3128+
public fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Lio/sentry/SentryLogLevel;
3129+
public synthetic fun deserialize (Lio/sentry/ObjectReader;Lio/sentry/ILogger;)Ljava/lang/Object;
3130+
}
3131+
31133132
public final class io/sentry/SentryLongDate : io/sentry/SentryDate {
31143133
public fun <init> (J)V
31153134
public fun nanoTimestamp ()J
@@ -4685,8 +4704,8 @@ public abstract interface class io/sentry/logger/ILoggerApi {
46854704
public abstract fun error (Ljava/lang/String;[Ljava/lang/Object;)V
46864705
public abstract fun fatal (Ljava/lang/String;[Ljava/lang/Object;)V
46874706
public abstract fun info (Ljava/lang/String;[Ljava/lang/Object;)V
4688-
public abstract fun log (Lio/sentry/SentryLevel;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/Hint;[Ljava/lang/Object;)V
4689-
public abstract fun log (Lio/sentry/SentryLevel;Ljava/lang/String;[Ljava/lang/Object;)V
4707+
public abstract fun log (Lio/sentry/SentryLogLevel;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/Hint;[Ljava/lang/Object;)V
4708+
public abstract fun log (Lio/sentry/SentryLogLevel;Ljava/lang/String;[Ljava/lang/Object;)V
46904709
public abstract fun trace (Ljava/lang/String;[Ljava/lang/Object;)V
46914710
public abstract fun warn (Ljava/lang/String;[Ljava/lang/Object;)V
46924711
}
@@ -4702,8 +4721,8 @@ public final class io/sentry/logger/LoggerApi : io/sentry/logger/ILoggerApi {
47024721
public fun error (Ljava/lang/String;[Ljava/lang/Object;)V
47034722
public fun fatal (Ljava/lang/String;[Ljava/lang/Object;)V
47044723
public fun info (Ljava/lang/String;[Ljava/lang/Object;)V
4705-
public fun log (Lio/sentry/SentryLevel;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/Hint;[Ljava/lang/Object;)V
4706-
public fun log (Lio/sentry/SentryLevel;Ljava/lang/String;[Ljava/lang/Object;)V
4724+
public fun log (Lio/sentry/SentryLogLevel;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/Hint;[Ljava/lang/Object;)V
4725+
public fun log (Lio/sentry/SentryLogLevel;Ljava/lang/String;[Ljava/lang/Object;)V
47074726
public fun trace (Ljava/lang/String;[Ljava/lang/Object;)V
47084727
public fun warn (Ljava/lang/String;[Ljava/lang/Object;)V
47094728
}
@@ -4722,8 +4741,8 @@ public final class io/sentry/logger/NoOpLoggerApi : io/sentry/logger/ILoggerApi
47224741
public fun fatal (Ljava/lang/String;[Ljava/lang/Object;)V
47234742
public static fun getInstance ()Lio/sentry/logger/NoOpLoggerApi;
47244743
public fun info (Ljava/lang/String;[Ljava/lang/Object;)V
4725-
public fun log (Lio/sentry/SentryLevel;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/Hint;[Ljava/lang/Object;)V
4726-
public fun log (Lio/sentry/SentryLevel;Ljava/lang/String;[Ljava/lang/Object;)V
4744+
public fun log (Lio/sentry/SentryLogLevel;Lio/sentry/SentryDate;Ljava/lang/String;Lio/sentry/Hint;[Ljava/lang/Object;)V
4745+
public fun log (Lio/sentry/SentryLogLevel;Ljava/lang/String;[Ljava/lang/Object;)V
47274746
public fun trace (Ljava/lang/String;[Ljava/lang/Object;)V
47284747
public fun warn (Ljava/lang/String;[Ljava/lang/Object;)V
47294748
}

sentry/src/main/java/io/sentry/SentryLogEvent.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ public final class SentryLogEvent implements JsonUnknown, JsonSerializable {
1515
private @NotNull SentryId traceId;
1616
private @NotNull Double timestamp;
1717
private @NotNull String body;
18-
private @NotNull SentryLevel level;
18+
private @NotNull SentryLogLevel level;
1919

2020
private @Nullable Map<String, SentryLogEventAttributeValue> attributes;
2121
private @Nullable Map<String, Object> unknown;
@@ -24,15 +24,15 @@ public SentryLogEvent(
2424
final @NotNull SentryId traceId,
2525
final @NotNull SentryDate timestamp,
2626
final @NotNull String body,
27-
final @NotNull SentryLevel level) {
27+
final @NotNull SentryLogLevel level) {
2828
this(traceId, DateUtils.nanosToSeconds(timestamp.nanoTimestamp()), body, level);
2929
}
3030

3131
public SentryLogEvent(
3232
final @NotNull SentryId traceId,
3333
final @NotNull Double timestamp,
3434
final @NotNull String body,
35-
final @NotNull SentryLevel level) {
35+
final @NotNull SentryLogLevel level) {
3636
this.traceId = traceId;
3737
this.timestamp = timestamp;
3838
this.body = body;
@@ -56,11 +56,11 @@ public void setBody(@NotNull String body) {
5656
this.body = body;
5757
}
5858

59-
public @NotNull SentryLevel getLevel() {
59+
public @NotNull SentryLogLevel getLevel() {
6060
return level;
6161
}
6262

63-
public void setLevel(final @NotNull SentryLevel level) {
63+
public void setLevel(final @NotNull SentryLogLevel level) {
6464
this.level = level;
6565
}
6666

@@ -123,7 +123,7 @@ public static final class Deserializer implements JsonDeserializer<SentryLogEven
123123
@Nullable SentryId traceId = null;
124124
@Nullable Double timestamp = null;
125125
@Nullable String body = null;
126-
@Nullable SentryLevel level = null;
126+
@Nullable SentryLogLevel level = null;
127127
@Nullable Map<String, SentryLogEventAttributeValue> attributes = null;
128128

129129
reader.beginObject();
@@ -140,7 +140,7 @@ public static final class Deserializer implements JsonDeserializer<SentryLogEven
140140
body = reader.nextStringOrNull();
141141
break;
142142
case JsonKeys.LEVEL:
143-
level = reader.nextOrNull(logger, new SentryLevel.Deserializer());
143+
level = reader.nextOrNull(logger, new SentryLogLevel.Deserializer());
144144
break;
145145
case JsonKeys.ATTRIBUTES:
146146
attributes =
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package io.sentry;
2+
3+
import java.io.IOException;
4+
import java.util.Locale;
5+
import org.jetbrains.annotations.NotNull;
6+
7+
/** the SentryLevel for Logs */
8+
public enum SentryLogLevel implements JsonSerializable {
9+
TRACE(1),
10+
DEBUG(5),
11+
INFO(9),
12+
WARN(13),
13+
ERROR(17),
14+
FATAL(21);
15+
16+
private final int severityNumber;
17+
18+
private SentryLogLevel(int severityNumber) {
19+
this.severityNumber = severityNumber;
20+
}
21+
22+
public int getSeverityNumber() {
23+
return severityNumber;
24+
}
25+
26+
@Override
27+
public void serialize(final @NotNull ObjectWriter writer, final @NotNull ILogger logger)
28+
throws IOException {
29+
writer.value(name().toLowerCase(Locale.ROOT));
30+
}
31+
32+
public static final class Deserializer implements JsonDeserializer<SentryLogLevel> {
33+
34+
@Override
35+
public @NotNull SentryLogLevel deserialize(
36+
@NotNull ObjectReader reader, @NotNull ILogger logger) throws Exception {
37+
return SentryLogLevel.valueOf(reader.nextString().toUpperCase(Locale.ROOT));
38+
}
39+
}
40+
}

sentry/src/main/java/io/sentry/logger/ILoggerApi.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.sentry.Hint;
44
import io.sentry.SentryDate;
5-
import io.sentry.SentryLevel;
5+
import io.sentry.SentryLogLevel;
66
import org.jetbrains.annotations.ApiStatus;
77
import org.jetbrains.annotations.NotNull;
88
import org.jetbrains.annotations.Nullable;
@@ -22,10 +22,10 @@ public interface ILoggerApi {
2222

2323
void fatal(final @Nullable String message, @Nullable Object... args);
2424

25-
void log(@NotNull SentryLevel level, @Nullable String message, @Nullable Object... args);
25+
void log(@NotNull SentryLogLevel level, @Nullable String message, @Nullable Object... args);
2626

2727
void log(
28-
@NotNull SentryLevel level,
28+
@NotNull SentryLogLevel level,
2929
@Nullable SentryDate timestamp,
3030
@Nullable String message,
3131
final @Nullable Hint hint,

sentry/src/main/java/io/sentry/logger/LoggerApi.java

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.sentry.SentryLevel;
1010
import io.sentry.SentryLogEvent;
1111
import io.sentry.SentryLogEventAttributeValue;
12+
import io.sentry.SentryLogLevel;
1213
import io.sentry.SentryOptions;
1314
import io.sentry.SpanId;
1415
import io.sentry.clientreport.DiscardReason;
@@ -33,45 +34,45 @@ public LoggerApi(final @NotNull Scopes scopes) {
3334
@Override
3435
public void trace(final @Nullable String message, final @Nullable Object... args) {
3536
// TODO SentryLevel.TRACE does not exists yet so we just report it as DEBUG for now
36-
log(SentryLevel.DEBUG, message, args);
37+
log(SentryLogLevel.DEBUG, message, args);
3738
}
3839

3940
@Override
4041
public void debug(final @Nullable String message, final @Nullable Object... args) {
41-
log(SentryLevel.DEBUG, message, args);
42+
log(SentryLogLevel.DEBUG, message, args);
4243
}
4344

4445
@Override
4546
public void info(final @Nullable String message, final @Nullable Object... args) {
46-
log(SentryLevel.INFO, message, args);
47+
log(SentryLogLevel.INFO, message, args);
4748
}
4849

4950
@Override
5051
public void warn(final @Nullable String message, final @Nullable Object... args) {
51-
log(SentryLevel.WARNING, message, args);
52+
log(SentryLogLevel.WARN, message, args);
5253
}
5354

5455
@Override
5556
public void error(final @Nullable String message, final @Nullable Object... args) {
56-
log(SentryLevel.ERROR, message, args);
57+
log(SentryLogLevel.ERROR, message, args);
5758
}
5859

5960
@Override
6061
public void fatal(final @Nullable String message, final @Nullable Object... args) {
61-
log(SentryLevel.FATAL, message, args);
62+
log(SentryLogLevel.FATAL, message, args);
6263
}
6364

6465
@Override
6566
public void log(
66-
final @NotNull SentryLevel level,
67+
final @NotNull SentryLogLevel level,
6768
final @Nullable String message,
6869
final @Nullable Object... args) {
6970
log(level, null, message, null, args);
7071
}
7172

7273
@Override
7374
public void log(
74-
final @NotNull SentryLevel level,
75+
final @NotNull SentryLogLevel level,
7576
final @Nullable SentryDate timestamp,
7677
final @Nullable String message,
7778
final @Nullable Hint hint,
@@ -81,7 +82,7 @@ public void log(
8182

8283
@SuppressWarnings("AnnotateFormatMethod")
8384
private void captureLog(
84-
final @NotNull SentryLevel level,
85+
final @NotNull SentryLogLevel level,
8586
final @Nullable SentryDate timestamp,
8687
final @Nullable Hint hint,
8788
final @Nullable String message,

sentry/src/main/java/io/sentry/logger/NoOpLoggerApi.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import io.sentry.Hint;
44
import io.sentry.SentryDate;
5-
import io.sentry.SentryLevel;
5+
import io.sentry.SentryLogLevel;
66
import org.jetbrains.annotations.ApiStatus;
77
import org.jetbrains.annotations.NotNull;
88
import org.jetbrains.annotations.Nullable;
@@ -49,13 +49,14 @@ public void fatal(@Nullable String message, @Nullable Object... args) {
4949
}
5050

5151
@Override
52-
public void log(@NotNull SentryLevel level, @Nullable String message, @Nullable Object... args) {
52+
public void log(
53+
@NotNull SentryLogLevel level, @Nullable String message, @Nullable Object... args) {
5354
// do nothing
5455
}
5556

5657
@Override
5758
public void log(
58-
@NotNull SentryLevel level,
59+
@NotNull SentryLogLevel level,
5960
@Nullable SentryDate timestamp,
6061
@Nullable String message,
6162
final @Nullable Hint hint,

sentry/src/test/java/io/sentry/protocol/SentryLogsSerializationTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,10 @@ import io.sentry.ILogger
66
import io.sentry.JsonObjectReader
77
import io.sentry.JsonObjectWriter
88
import io.sentry.JsonSerializable
9-
import io.sentry.SentryLevel
109
import io.sentry.SentryLogEvent
1110
import io.sentry.SentryLogEventAttributeValue
1211
import io.sentry.SentryLogEvents
12+
import io.sentry.SentryLogLevel
1313
import org.junit.Test
1414
import org.mockito.kotlin.mock
1515
import java.io.StringReader
@@ -26,7 +26,7 @@ class SentryLogsSerializationTest {
2626
SentryId("5c1f73d39486827b9e60ceb1fc23277a"),
2727
DateUtils.dateToSeconds(DateUtils.getDateTime("2004-04-10T18:24:03.000Z")),
2828
"42e6bd2a-c45e-414d-8066-ed5196fbc686",
29-
SentryLevel.INFO
29+
SentryLogLevel.INFO
3030
).also {
3131
it.attributes = mutableMapOf(
3232
"sentry.sdk.name" to SentryLogEventAttributeValue("string", "sentry.java.spring-boot.jakarta"),

sentry/src/test/java/io/sentry/transport/RateLimiterTest.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@ import io.sentry.SentryEnvelope
1616
import io.sentry.SentryEnvelopeHeader
1717
import io.sentry.SentryEnvelopeItem
1818
import io.sentry.SentryEvent
19-
import io.sentry.SentryLevel
2019
import io.sentry.SentryLogEvent
2120
import io.sentry.SentryLogEvents
21+
import io.sentry.SentryLogLevel
2222
import io.sentry.SentryLongDate
2323
import io.sentry.SentryOptions
2424
import io.sentry.SentryOptionsManipulator
@@ -354,7 +354,7 @@ class RateLimiterTest {
354354
fixture.serializer,
355355
SentryLogEvents(
356356
listOf(
357-
SentryLogEvent(SentryId(), SentryLongDate(0), "hello", SentryLevel.INFO)
357+
SentryLogEvent(SentryId(), SentryLongDate(0), "hello", SentryLogLevel.INFO)
358358
)
359359
)
360360
)

0 commit comments

Comments
 (0)