Skip to content

Commit bc38d1f

Browse files
improve logging
1 parent d179891 commit bc38d1f

File tree

5 files changed

+59
-48
lines changed

5 files changed

+59
-48
lines changed

superstream-clients/src/main/java/ai/superstream/agent/KafkaProducerInterceptor.java

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,9 @@ public static void onExit(@Advice.This Object producer) {
311311
}
312312
reporter.updateMostImpactfulTopic(mostImpactfulTopic);
313313
}
314-
} catch (Exception ignored) {}
314+
} catch (Exception e) {
315+
logger.debug("Failed to get most impactful topic: {}", e.getMessage());
316+
}
315317

316318
// Create metrics info for this producer
317319
ProducerMetricsInfo metricsInfo = new ProducerMetricsInfo(producer, reporter);
@@ -850,7 +852,9 @@ public boolean collectMetricsForProducer(String producerId, ProducerMetricsInfo
850852
nodeId = String.valueOf(id);
851853
keyString = namePart;
852854
}
853-
} catch (NumberFormatException ignored) {}
855+
} catch (NumberFormatException e) {
856+
logger.debug("Failed to parse node ID: {}", e.getMessage());
857+
}
854858
}
855859
}
856860
}
@@ -860,17 +864,25 @@ public boolean collectMetricsForProducer(String producerId, ProducerMetricsInfo
860864
} else {
861865
continue; // skip non-producer groups
862866
}
863-
} catch (Exception ignored) {}
867+
} catch (Exception e) {
868+
logger.debug("Failed to process metric name: {}", e.getMessage());
869+
}
864870
} else if (mKey instanceof String) {
865871
keyString = mKey.toString();
872+
873+
// producer-metrics group (per producer)
866874
if (keyString.startsWith("producer-metrics.")) {
867875
keyString = keyString.substring("producer-metrics.".length());
876+
877+
// producer-topic-metrics group (per topic)
868878
} else if (keyString.startsWith("producer-topic-metrics.")) {
869879
String[] parts = keyString.split("\\.", 3);
870880
if (parts.length == 3) {
871881
topicName = parts[1];
872882
keyString = parts[2];
873883
}
884+
885+
// producer-node-metrics group (per broker node)
874886
} else if (keyString.startsWith("producer-node-metrics.")) {
875887
String[] parts = keyString.split("\\.", 3);
876888
if (parts.length == 3) {
@@ -883,16 +895,22 @@ public boolean collectMetricsForProducer(String producerId, ProducerMetricsInfo
883895
nodeId = String.valueOf(id);
884896
keyString = parts[2];
885897
}
886-
} catch (NumberFormatException ignored) {}
898+
} catch (NumberFormatException e) {
899+
logger.debug("Failed to parse node ID: {}", e.getMessage());
900+
}
887901
}
888902
}
903+
904+
// app-info group (string values)
889905
} else if (keyString.startsWith("app-info.")) {
890906
keyString = keyString.substring("app-info.".length());
891-
} else if (!keyString.startsWith("producer-metrics") &&
892-
!keyString.startsWith("producer-topic-metrics") &&
893-
!keyString.startsWith("producer-node-metrics") &&
894-
!keyString.startsWith("app-info")) {
895-
continue; // skip non-producer groups
907+
908+
// skip metrics groups that are not producer-metrics, producer-topic-metrics, producer-node-metrics, or app-info
909+
} else if (!keyString.startsWith("producer-metrics") &&
910+
!keyString.startsWith("producer-topic-metrics") &&
911+
!keyString.startsWith("producer-node-metrics") &&
912+
!keyString.startsWith("app-info")) {
913+
continue;
896914
}
897915
}
898916
if (keyString == null) continue;
@@ -967,11 +985,15 @@ public boolean collectMetricsForProducer(String producerId, ProducerMetricsInfo
967985
}
968986
}
969987
}
970-
} catch (Exception ignore) {}
988+
} catch (Exception e) {
989+
logger.debug("Failed to extract topic from metric tags: {}", e.getMessage());
971990
}
972991
}
973992
}
974-
} catch (Exception ignore) {}
993+
}
994+
} catch (Exception e) {
995+
logger.debug("Failed to aggregate topics from metrics: {}", e.getMessage());
996+
}
975997

976998
if (!newTopics.isEmpty()) {
977999
reporter.addTopics(newTopics);

superstream-clients/src/main/java/ai/superstream/core/ClientReporter.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,13 +112,7 @@ public boolean reportClient(String bootstrapServers, Properties originalClientPr
112112
logger.debug("Successfully reported client information to {}", CLIENTS_TOPIC);
113113
return true;
114114
} catch (Exception e) {
115-
// Convert stack trace to string
116-
java.io.StringWriter sw = new java.io.StringWriter();
117-
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
118-
e.printStackTrace(pw);
119-
String stackTrace = sw.toString().replaceAll("\\r?\\n", " ");
120-
logger.error("[ERR-026] Error reporting client information. Error: {} - {}. Stack trace: {}",
121-
e.getClass().getName(), e.getMessage(), stackTrace);
115+
logger.error("[ERR-026] Error reporting client information.", e);
122116
return false;
123117
}
124118
}

superstream-clients/src/main/java/ai/superstream/core/ClientStatsReporter.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -179,13 +179,7 @@ void drainInto(Producer<String, String> producer) {
179179
logger.debug("Producer {} stats sent: before={} bytes, after={} bytes",
180180
clientId, totalBytesBefore, totalBytesAfter);
181181
} catch (Exception e) {
182-
// Convert stack trace to string
183-
java.io.StringWriter sw = new java.io.StringWriter();
184-
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
185-
e.printStackTrace(pw);
186-
String stackTrace = sw.toString().replaceAll("\\r?\\n", " ");
187-
logger.error("[ERR-021] Failed to drain stats for client {}. Error: {} - {}. Stack trace: {}",
188-
clientId, e.getClass().getName(), e.getMessage(), stackTrace);
182+
logger.error("[ERR-021] Failed to drain stats for client {}.", clientId, e);
189183
}
190184
}
191185

@@ -329,13 +323,7 @@ private void run() {
329323
}
330324
producer.flush();
331325
} catch (Exception e) {
332-
// Convert stack trace to string
333-
java.io.StringWriter sw = new java.io.StringWriter();
334-
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
335-
e.printStackTrace(pw);
336-
String stackTrace = sw.toString().replaceAll("\\r?\\n", " ");
337-
logger.error("[ERR-022] Cluster stats coordinator failed for {}, please make sure the Kafka user has read/write/describe permissions on superstream.* topics. Error: {} - {}. Stack trace: {}",
338-
bootstrapServers, e.getClass().getName(), e.getMessage(), stackTrace);
326+
logger.error("[ERR-022] Cluster stats coordinator failed for {}, please make sure the Kafka user has read/write/describe permissions on superstream.* topics.", bootstrapServers, e);
339327
}
340328
}
341329
}

superstream-clients/src/main/java/ai/superstream/core/MetadataConsumer.java

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -97,22 +97,10 @@ public MetadataMessage getMetadataMessage(String bootstrapServers, Properties or
9797
String json = records.iterator().next().value();
9898
return objectMapper.readValue(json, MetadataMessage.class);
9999
} catch (IOException e) {
100-
// Convert stack trace to string
101-
java.io.StringWriter sw = new java.io.StringWriter();
102-
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
103-
e.printStackTrace(pw);
104-
String stackTrace = sw.toString().replaceAll("\\r?\\n", " ");
105-
logger.error("[ERR-027] Unable to retrieve optimizations data from Superstream. This is required for optimization. Please contact the Superstream team if the issue persists. Error: {} - {}. Stack trace: {}",
106-
e.getClass().getName(), e.getMessage(), stackTrace);
100+
logger.error("[ERR-027] Unable to retrieve optimizations data from Superstream. This is required for optimization. Please contact the Superstream team if the issue persists.", e);
107101
return null;
108102
} catch (Exception e) {
109-
// Convert stack trace to string
110-
java.io.StringWriter sw = new java.io.StringWriter();
111-
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
112-
e.printStackTrace(pw);
113-
String stackTrace = sw.toString().replaceAll("\\r?\\n", " ");
114-
logger.error("[ERR-028] Unable to retrieve optimizations data from Superstream. This is required for optimization. Please make sure the Kafka user has read/write/describe permissions on superstream.* topics. Error: {} - {}. Stack trace: {}",
115-
e.getClass().getName(), e.getMessage(), stackTrace);
103+
logger.error("[ERR-028] Unable to retrieve optimizations data from Superstream. This is required for optimization. Please make sure the Kafka user has read/write/describe permissions on superstream.* topics.", e);
116104
return null;
117105
}
118106
}

superstream-clients/src/main/java/ai/superstream/util/SuperstreamLogger.java

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -83,8 +83,8 @@ public void error(String message, Object... args) {
8383
* Log an error message with an exception.
8484
*/
8585
public void error(String message, Throwable throwable) {
86-
System.err.println(formatLogMessage("ERROR", message));
87-
throwable.printStackTrace(System.err);
86+
String formattedMessage = formatExceptionMessage(message, throwable);
87+
System.err.println(formatLogMessage("ERROR", formattedMessage));
8888
}
8989

9090
/**
@@ -137,4 +137,23 @@ private String formatArgs(String message, Object... args) {
137137
}
138138
return result;
139139
}
140+
141+
/**
142+
* Format an exception message with class name, message and stack trace.
143+
* This is a standardized way to format exception messages across the codebase.
144+
* We are doing that because we saw that in some logging systems, the stack trace is not included in the error message unless it appears without a new line.
145+
*/
146+
private String formatExceptionMessage(String message, Throwable throwable) {
147+
// Convert stack trace to string
148+
java.io.StringWriter sw = new java.io.StringWriter();
149+
java.io.PrintWriter pw = new java.io.PrintWriter(sw);
150+
throwable.printStackTrace(pw);
151+
String stackTrace = sw.toString().replaceAll("\\r?\\n", " ");
152+
153+
return String.format("%s. Error: %s - %s. Stack trace: %s",
154+
message,
155+
throwable.getClass().getName(),
156+
throwable.getMessage(),
157+
stackTrace);
158+
}
140159
}

0 commit comments

Comments
 (0)