diff --git a/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java b/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java index 46692b22837..2029afc2f91 100644 --- a/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java +++ b/core/src/main/java/com/linecorp/armeria/common/logging/DefaultRequestLog.java @@ -1118,6 +1118,25 @@ public int currentAttempt() { return currentAttempt; } + @Override + public void requestEnd() { + requestEnd0(System.nanoTime()); + } + + @Override + public void requestEnd(long requestEndTimeNanos) { + requestEnd0(requestEndTimeNanos); + } + + private void requestEnd0(long requestEndTimeNanos) { + if (isAvailable(REQUEST_END_TIME)) { + return; + } + + this.requestEndTimeNanos = requestEndTimeNanos; + updateFlags(REQUEST_END_TIME); + } + @Override public void endRequest() { endRequest0(null); @@ -1183,7 +1202,10 @@ private void endRequest0(@Nullable Throwable requestCause, long requestEndTimeNa setNamesIfAbsent(); } - this.requestEndTimeNanos = requestEndTimeNanos; + // Set requestEndTimeNanos if it is not already set + if (!isAvailable(REQUEST_END_TIME)) { + this.requestEndTimeNanos = requestEndTimeNanos; + } setRequestCause(requestCause); updateFlags(flags); diff --git a/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java b/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java index ba0ad665fb8..f74ad06798f 100644 --- a/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java +++ b/core/src/main/java/com/linecorp/armeria/common/logging/RequestLogBuilder.java @@ -189,6 +189,18 @@ void session(@Nullable Channel channel, SessionProtocol sessionProtocol, @Nullab @UnstableApi void requestCause(Throwable cause); + /** + * Sets the {@link RequestLog#requestEndTimeNanos()}. + */ + @UnstableApi + void requestEnd(); + + /** + * Sets the {@link RequestLog#requestEndTimeNanos()} with the specified timestamp. + */ + @UnstableApi + void requestEnd(long requestEndTimeNanos); + /** * Finishes the collection of the {@link Request} information. This method sets the following properties: *