From 86a4344a4c1847cc60cd1121be3d86b4650f3db8 Mon Sep 17 00:00:00 2001 From: SG0301092 Date: Thu, 6 Jul 2023 09:49:42 +0200 Subject: [PATCH] fix: timestampNanos nanos precision. --- .../spring/logging/StackdriverJsonLayout.java | 3 ++- .../StackdriverJsonLayoutLoggerTests.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/spring-cloud-gcp-logging/src/main/java/com/google/cloud/spring/logging/StackdriverJsonLayout.java b/spring-cloud-gcp-logging/src/main/java/com/google/cloud/spring/logging/StackdriverJsonLayout.java index 1ba2cc04f2..3f22c524dc 100644 --- a/spring-cloud-gcp-logging/src/main/java/com/google/cloud/spring/logging/StackdriverJsonLayout.java +++ b/spring-cloud-gcp-logging/src/main/java/com/google/cloud/spring/logging/StackdriverJsonLayout.java @@ -271,9 +271,10 @@ protected Map toJsonMap(ILoggingEvent event) { map.put( StackdriverTraceConstants.TIMESTAMP_SECONDS_ATTRIBUTE, TimeUnit.MILLISECONDS.toSeconds(event.getTimeStamp())); + int nanoseconds = event.getNanoseconds(); map.put( StackdriverTraceConstants.TIMESTAMP_NANOS_ATTRIBUTE, - TimeUnit.MILLISECONDS.toNanos(event.getTimeStamp() % 1_000)); + nanoseconds == -1 ? TimeUnit.MILLISECONDS.toNanos(event.getTimeStamp() % 1_000) : nanoseconds); } add( diff --git a/spring-cloud-gcp-logging/src/test/java/com/google/cloud/spring/logging/StackdriverJsonLayoutLoggerTests.java b/spring-cloud-gcp-logging/src/test/java/com/google/cloud/spring/logging/StackdriverJsonLayoutLoggerTests.java index 625f9b245a..e26d854ebc 100644 --- a/spring-cloud-gcp-logging/src/test/java/com/google/cloud/spring/logging/StackdriverJsonLayoutLoggerTests.java +++ b/spring-cloud-gcp-logging/src/test/java/com/google/cloud/spring/logging/StackdriverJsonLayoutLoggerTests.java @@ -246,6 +246,22 @@ void testJsonSeverityLevelMapping() { .containsExactly("DEBUG", "DEBUG", "INFO", "WARNING", "ERROR", "ERROR"); } + @Test + void testTimestampNanos() { + LOGGER.warn("test1"); + LOGGER.warn("test2"); + + List jsonLogRecords = Arrays.asList(new String(logOutput.toByteArray()).split("\n")); + + List logTimestampNanos = + jsonLogRecords.stream() + .map(record -> GSON.fromJson(record, Map.class)) + .map(data -> (Double) data.get(StackdriverTraceConstants.TIMESTAMP_NANOS_ATTRIBUTE)) + .collect(Collectors.toList()); + + assertThat(logTimestampNanos).anySatisfy(nanos -> assertThat(nanos % 1000000).isGreaterThan(0)); + } + @Test void testJsonLayoutEnhancer_missing() { LoggerContext lc = (LoggerContext) LoggerFactory.getILoggerFactory();