Index: src/test/java/de/siegmar/logbackgelf/GelfEncoderTest.java IDEA additional info: Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP <+>UTF-8 =================================================================== diff --git a/src/test/java/de/siegmar/logbackgelf/GelfEncoderTest.java b/src/test/java/de/siegmar/logbackgelf/GelfEncoderTest.java --- a/src/test/java/de/siegmar/logbackgelf/GelfEncoderTest.java (revision c4465cd35b5f2a15a91b331a61708488f2f5e916) +++ b/src/test/java/de/siegmar/logbackgelf/GelfEncoderTest.java (date 1724439478645) @@ -490,4 +490,131 @@ assertThat(encoder.getShortMessageLayout()).isNotNull(); } + @Test + void millionEncodeLoop() { + encoder.start(); + + final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + final Logger logger = lc.getLogger(LOGGER_NAME); + + long startTime = System.nanoTime(); + for (int i = 0; i < 1_000_000; i++) { + assertThatJson(encodeToStr(simpleLoggingEvent(logger, null))) + .node("full_message").isEqualTo("message 1\\n"); + } + System.out.printf("Time for 1M encodes: %,d ns.\n", System.nanoTime() - startTime); + } + + @Test + void millionEncodeLoopNumbersAsString() { + encoder.setNumbersAsString(true); + encoder.start(); + + final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + final Logger logger = lc.getLogger(LOGGER_NAME); + + long startTime = System.nanoTime(); + for (int i = 0; i < 1_000_000; i++) { + assertThatJson(encodeToStr(simpleLoggingEvent(logger, null))) + .node("full_message").isEqualTo("message 1\\n"); + } + System.out.printf("Time for 1M encodes with numbersAsString=true: %,d ns.\n", System.nanoTime() - startTime); + } + + @Test + void millionEncodeLoop5Fields() { + encoder.start(); + + final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + final Logger logger = lc.getLogger(LOGGER_NAME); + + long startTime = System.nanoTime(); + for (int i = 0; i < 1_000_000; i++) { + final var event = simpleLoggingEvent(logger, null); + event.addKeyValuePair(new KeyValuePair("field1","value1")); + event.addKeyValuePair(new KeyValuePair("field2","value2")); + event.addKeyValuePair(new KeyValuePair("field3","value3")); + event.addKeyValuePair(new KeyValuePair("field4","value4")); + event.addKeyValuePair(new KeyValuePair("field5","value5")); + assertThatJson(encodeToStr(event)) + .node("full_message").isEqualTo("message 1\\n"); + } + System.out.printf("Time for 1M encodes with 5 key-value pairs: %,d ns.\n", System.nanoTime() - startTime); + } + + @Test + void millionEncodeLoop5FieldsNumbersAsString() { + encoder.setNumbersAsString(true); + encoder.start(); + + final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + final Logger logger = lc.getLogger(LOGGER_NAME); + + long startTime = System.nanoTime(); + for (int i = 0; i < 1_000_000; i++) { + final var event = simpleLoggingEvent(logger, null); + event.addKeyValuePair(new KeyValuePair("field1","value1")); + event.addKeyValuePair(new KeyValuePair("field2","value2")); + event.addKeyValuePair(new KeyValuePair("field3","value3")); + event.addKeyValuePair(new KeyValuePair("field4","value4")); + event.addKeyValuePair(new KeyValuePair("field5","value5")); + assertThatJson(encodeToStr(event)) + .node("full_message").isEqualTo("message 1\\n"); + } + System.out.printf("Time for 1M encodes with 5 key-value pairs and numbersAsString=true: %,d ns.\n", System.nanoTime() - startTime); + } + + @Test + void millionEncodeLoop10Fields() { + encoder.start(); + + final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + final Logger logger = lc.getLogger(LOGGER_NAME); + + long startTime = System.nanoTime(); + for (int i = 0; i < 1_000_000; i++) { + final var event = simpleLoggingEvent(logger, null); + event.addKeyValuePair(new KeyValuePair("field1","value1")); + event.addKeyValuePair(new KeyValuePair("field2","value2")); + event.addKeyValuePair(new KeyValuePair("field3","value3")); + event.addKeyValuePair(new KeyValuePair("field4","value4")); + event.addKeyValuePair(new KeyValuePair("field5","value5")); + event.addKeyValuePair(new KeyValuePair("field6","value6")); + event.addKeyValuePair(new KeyValuePair("field7","value7")); + event.addKeyValuePair(new KeyValuePair("field8","value8")); + event.addKeyValuePair(new KeyValuePair("field9","value9")); + event.addKeyValuePair(new KeyValuePair("field10","value10")); + assertThatJson(encodeToStr(event)) + .node("full_message").isEqualTo("message 1\\n"); + } + System.out.printf("Time for 1M encodes with 10 key-value pairs: %,d ns.\n", System.nanoTime() - startTime); + } + + @Test + void millionEncodeLoop10FieldsNumbersAsString() { + encoder.setNumbersAsString(true); + encoder.start(); + + final LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory(); + final Logger logger = lc.getLogger(LOGGER_NAME); + + long startTime = System.nanoTime(); + for (int i = 0; i < 1_000_000; i++) { + final var event = simpleLoggingEvent(logger, null); + event.addKeyValuePair(new KeyValuePair("field1","value1")); + event.addKeyValuePair(new KeyValuePair("field2","value2")); + event.addKeyValuePair(new KeyValuePair("field3","value3")); + event.addKeyValuePair(new KeyValuePair("field4","value4")); + event.addKeyValuePair(new KeyValuePair("field5","value5")); + event.addKeyValuePair(new KeyValuePair("field6","value6")); + event.addKeyValuePair(new KeyValuePair("field7","value7")); + event.addKeyValuePair(new KeyValuePair("field8","value8")); + event.addKeyValuePair(new KeyValuePair("field9","value9")); + event.addKeyValuePair(new KeyValuePair("field10","value10")); + assertThatJson(encodeToStr(event)) + .node("full_message").isEqualTo("message 1\\n"); + } + System.out.printf("Time for 1M encodes with 10 key-value pairs and numbersAsString=true: %,d ns.\n", System.nanoTime() - startTime); + } + }