|
40 | 40 | import java.nio.file.StandardOpenOption; |
41 | 41 | import java.text.SimpleDateFormat; |
42 | 42 | import java.util.Arrays; |
| 43 | +import java.util.List; |
43 | 44 | import java.util.Collections; |
44 | 45 | import java.util.Date; |
45 | 46 | import java.util.TimeZone; |
|
50 | 51 | import org.junit.jupiter.api.BeforeEach; |
51 | 52 | import org.junit.jupiter.api.Order; |
52 | 53 | import org.junit.jupiter.api.Test; |
| 54 | +import org.slf4j.event.KeyValuePair; |
53 | 55 | import software.amazon.lambda.powertools.common.stubs.TestLambdaContext; |
54 | 56 | import org.slf4j.LoggerFactory; |
55 | 57 | import org.slf4j.MDC; |
@@ -442,4 +444,61 @@ void shouldLogException() { |
442 | 444 | .contains("\"stack\":\"java.lang.IllegalStateException: Unexpected value\\n"); |
443 | 445 | } |
444 | 446 |
|
| 447 | + @Test |
| 448 | + void shouldLogKeyValuePairs() { |
| 449 | + // GIVEN |
| 450 | + LambdaJsonEncoder encoder = new LambdaJsonEncoder(); |
| 451 | + encoder.start(); |
| 452 | + |
| 453 | + Object[] arguments = { |
| 454 | + "argument_01", |
| 455 | + StructuredArguments.entry("structured_argument_01_retain", "retained"), |
| 456 | + StructuredArguments.entry("structured_argument_02_overwrite", "to_be_overwritten") |
| 457 | + }; |
| 458 | + LoggingEvent keyValuePairsLoggingEvent = new LoggingEvent("fqcn", logger, Level.INFO, "Key Value Pairs Test with argument: {}", |
| 459 | + null, arguments); |
| 460 | + |
| 461 | + MDC.put("mdc_01_retain", "retained"); |
| 462 | + MDC.put("mdc_02_overwrite", "to_be_overwritten"); |
| 463 | + |
| 464 | + keyValuePairsLoggingEvent.setKeyValuePairs(List.of( |
| 465 | + new KeyValuePair("key_01_string", "value_01"), |
| 466 | + new KeyValuePair("key_02_numeric", 2), |
| 467 | + new KeyValuePair("key_03_decimal", 2.333), |
| 468 | + new KeyValuePair("key_04_null", null), |
| 469 | + new KeyValuePair("", "value_05_empty_key"), |
| 470 | + new KeyValuePair(null, "value_06_null_key"), |
| 471 | + new KeyValuePair("key_07_boolean_true", true), |
| 472 | + new KeyValuePair("key_08_boolean_false", false), |
| 473 | + new KeyValuePair("mdc_02_overwrite", "overwritten_by_kvp"), |
| 474 | + new KeyValuePair("structured_argument_02_overwrite", "overwritten_by_kvp") |
| 475 | + )); |
| 476 | + |
| 477 | + // WHEN |
| 478 | + byte[] encoded = encoder.encode(keyValuePairsLoggingEvent); |
| 479 | + String result = new String(encoded, StandardCharsets.UTF_8); |
| 480 | + |
| 481 | + // THEN |
| 482 | + assertThat(result) |
| 483 | + // Arguments |
| 484 | + .contains("Key Value Pairs Test with argument: argument_01") |
| 485 | + .contains("\"structured_argument_01_retain\":\"retained\"") |
| 486 | + // .doesNotContain("\"structured_argument_02_overwrite\":\"to_be_overwritten\"") TODO: Deduplication not implemented vor Arguments |
| 487 | + // MDC |
| 488 | + .contains("\"mdc_01_retain\":\"retained\"") |
| 489 | + // .doesNotContain("\"mdc_02_overwrite\":\"to_be_overwritten\"") TODO: Deduplication not implemented vor Arguments |
| 490 | + // Key Value Pairs |
| 491 | + .contains("\"key_01_string\":\"value_01\"") |
| 492 | + .contains("\"key_02_numeric\":2") |
| 493 | + .contains("\"key_03_decimal\":2.333") |
| 494 | + .contains("\"key_04_null\":null") |
| 495 | + .contains("\"\":\"value_05_empty_key\"") |
| 496 | + .contains("\"null\":\"value_06_null_key\"") |
| 497 | + .contains("\"key_07_boolean_true\":true") |
| 498 | + .contains("\"key_08_boolean_false\":false") |
| 499 | + .contains("\"mdc_02_overwrite\":\"overwritten_by_kvp\"") |
| 500 | + .contains("\"structured_argument_02_overwrite\":\"overwritten_by_kvp\"") |
| 501 | + ; |
| 502 | + } |
| 503 | + |
445 | 504 | } |
0 commit comments