Skip to content

Commit 1d861cf

Browse files
committed
Improve performance of number conversion in GelfEncoder #108
1 parent 313c010 commit 1d861cf

File tree

1 file changed

+18
-1
lines changed

1 file changed

+18
-1
lines changed

src/main/java/de/siegmar/logbackgelf/GelfEncoder.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -312,18 +312,35 @@ private void addField(final Map<String, Object> dst, final String fieldName, fin
312312
}
313313
}
314314

315+
@SuppressWarnings("checkstyle:ReturnCount")
315316
private Object convertToNumberIfNeeded(final Object value) {
316317
if (numbersAsString || !(value instanceof String)) {
317318
return value;
318319
}
319320

321+
// Simple check if the string could be a number to avoid the performance overhead of exception handling
322+
final char[] ca = ((String) value).toCharArray();
323+
for (char c : ca) {
324+
if (!isBigDecimalChar(c)) {
325+
return value;
326+
}
327+
}
328+
320329
try {
321-
return new BigDecimal((String) value);
330+
return new BigDecimal(ca, 0, ca.length);
322331
} catch (final NumberFormatException e) {
323332
return value;
324333
}
325334
}
326335

336+
@SuppressWarnings("checkstyle:BooleanExpressionComplexity")
337+
private static boolean isBigDecimalChar(final char c) {
338+
return c >= '0' && c <= '9'
339+
|| c == '.'
340+
|| c == '+' || c == '-'
341+
|| c == 'E' || c == 'e';
342+
}
343+
327344
@Override
328345
public void start() {
329346
if (originHost == null || originHost.isBlank()) {

0 commit comments

Comments
 (0)