Class DefaultRequestLog
- java.lang.Object
-
- com.linecorp.armeria.common.logging.DefaultRequestLog
-
- All Implemented Interfaces:
RequestLog
,RequestLogBuilder
public class DefaultRequestLog extends Object implements RequestLog, RequestLogBuilder
DefaultRequestLog
implementation.
-
-
Field Summary
-
Fields inherited from interface com.linecorp.armeria.common.logging.RequestLogBuilder
NOOP
-
-
Constructor Summary
Constructors Constructor Description DefaultRequestLog(RequestContext ctx)
Creates a new instance.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addChild(RequestLog child)
Adds the specifiedRequestLog
so that the logs are propagated from thechild
.void
addListener(RequestLogListener listener, RequestLogAvailability availability)
Adds the specifiedRequestLogListener
so that it's notified when the specifiedRequestLogAvailability
is satisfied.void
addListener(RequestLogListener listener, RequestLogAvailability... availabilities)
Adds the specifiedRequestLogListener
so that it's notified when all of the specifiedRequestLogAvailability
s are satisfied.void
addListener(RequestLogListener listener, Iterable<RequestLogAvailability> availabilities)
Adds the specifiedRequestLogListener
so that it's notified when all of the specifiedRequestLogAvailability
s are satisfied.Set<RequestLogAvailability>
availabilities()
Returns the set of satisfiedRequestLogAvailability
s.Channel
channel()
List<RequestLog>
children()
Returns the list of childRequestLog
s, ordered by the time it was added.RequestContext
context()
Returns theRequestContext
associated with theRequest
being handled.void
deferRequestContent()
Allows theRequestLogBuilder.requestContent(Object, Object)
called afterRequestLogBuilder.endRequest()
.void
deferResponseContent()
Allows theRequestLogBuilder.responseContent(Object, Object)
called afterRequestLogBuilder.endResponse()
.void
endRequest()
SetsRequestLog.requestDurationNanos()
and finishes the collection of the information.void
endRequest(Throwable requestCause)
SetsRequestLog.requestDurationNanos()
and finishes the collection of the information.void
endResponse()
SetsRequestLog.responseDurationNanos()
and finishes the collection of the information.void
endResponse(Throwable responseCause)
SetsRequestLog.responseDurationNanos()
and finishes the collection of the information.void
endResponseWithLastChild()
Fills the response-side logs from the last added child.void
increaseRequestLength(long deltaBytes)
Increases theRequestLog.requestLength()
bydeltaBytes
.void
increaseResponseLength(long deltaBytes)
Increases theRequestLog.responseLength()
bydeltaBytes
.boolean
isAvailable(RequestLogAvailability availability)
Returnstrue
if the specifiedRequestLogAvailability
is satisfied.boolean
isAvailable(RequestLogAvailability... availabilities)
Returnstrue
if all of the specifiedRequestLogAvailability
s are satisfied.boolean
isAvailable(Iterable<RequestLogAvailability> availabilities)
Returnstrue
if all of the specifiedRequestLogAvailability
s are satisfied.boolean
isRequestContentDeferred()
Returnstrue
ifRequestLogBuilder.deferRequestContent()
was ever called.boolean
isResponseContentDeferred()
Returnstrue
ifRequestLogBuilder.deferResponseContent()
was ever called.Object
rawRequestContent()
Returns the low-level content object of theRequest
, which is specific to theSerializationFormat
.Object
rawResponseContent()
Returns the low-level content object of theResponse
, which is specific to theSerializationFormat
.Throwable
requestCause()
Returns the cause of request processing failure.Object
requestContent()
Returns the high-level content object of theRequest
, which is specific to theSerializationFormat
.void
requestContent(Object requestContent, Object rawRequestContent)
Sets theRequestLog.requestContent()
and theRequestLog.rawRequestContent()
.long
requestDurationNanos()
Returns the duration that was taken to consume or produce the request completely, in nanoseconds.long
requestEndTimeNanos()
Returns the time when the processing of the request finished, in nanoseconds.HttpHeaders
requestHeaders()
Returns theHttpHeaders
of theRequest
.void
requestHeaders(HttpHeaders requestHeaders)
Sets theRequestLog.requestHeaders()
.long
requestLength()
Returns the length of the request content.void
requestLength(long requestLength)
Sets theRequestLog.requestLength()
.long
requestStartTimeMillis()
Returns the time when the processing of the request started, in millis since the epoch.long
requestStartTimeNanos()
Returns the time when the processing of the request started, in nanoseconds.Throwable
responseCause()
Returns the cause of response processing failure.Object
responseContent()
Returns the high-level content object of theResponse
, which is specific to theSerializationFormat
.void
responseContent(Object responseContent, Object rawResponseContent)
Sets theRequestLog.responseContent()
and theRequestLog.rawResponseContent()
.long
responseDurationNanos()
Returns the duration that was taken to consume or produce the response completely, in nanoseconds.long
responseEndTimeNanos()
Returns the time when the processing of the response finished, in nanoseconds.HttpHeaders
responseHeaders()
Returns the non-informational statusHttpHeaders
of theResponse
.void
responseHeaders(HttpHeaders responseHeaders)
Sets theRequestLog.responseHeaders()
.long
responseLength()
Returns the length of the response content.void
responseLength(long responseLength)
Sets theRequestLog.responseLength()
.long
responseStartTimeMillis()
Returns the time when the processing of the response started, in millis since the epoch.long
responseStartTimeNanos()
Returns the time when the processing of the response started, in nanoseconds.Scheme
scheme()
SerializationFormat
serializationFormat()
Returns theSerializationFormat
of theRequest
.void
serializationFormat(SerializationFormat serializationFormat)
Sets theSerializationFormat
.SessionProtocol
sessionProtocol()
Returns theSessionProtocol
of theRequest
.void
startRequest(Channel channel, SessionProtocol sessionProtocol)
Starts the collection of information for theRequest
.void
startResponse()
Starts the collection of information for theResponse
.String
toString()
String
toStringRequestOnly()
Returns the string representation of theRequest
, with no sanitization of headers or content.String
toStringRequestOnly(Function<HttpHeaders,HttpHeaders> headersSanitizer, Function<Object,Object> contentSanitizer)
Returns the string representation of theRequest
.String
toStringResponseOnly()
Returns the string representation of theResponse
, with no sanitization of headers or content.String
toStringResponseOnly(Function<HttpHeaders,HttpHeaders> headersSanitizer, Function<Object,Object> contentSanitizer)
Returns the string representation of theResponse
.long
totalDurationNanos()
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface com.linecorp.armeria.common.logging.RequestLog
authority, ensureAvailability, ensureAvailability, ensureAvailability, host, method, path, query, status, statusCode
-
Methods inherited from interface com.linecorp.armeria.common.logging.RequestLogBuilder
startRequest
-
-
-
-
Constructor Detail
-
DefaultRequestLog
public DefaultRequestLog(RequestContext ctx)
Creates a new instance.
-
-
Method Detail
-
addChild
public void addChild(RequestLog child)
Description copied from interface:RequestLogBuilder
Adds the specifiedRequestLog
so that the logs are propagated from thechild
. Note that only the request-side logs of the first added child will be propagated. To fill the response-side logs you need to callRequestLogBuilder.endResponseWithLastChild()
.- Specified by:
addChild
in interfaceRequestLogBuilder
-
endResponseWithLastChild
public void endResponseWithLastChild()
Description copied from interface:RequestLogBuilder
Fills the response-side logs from the last added child. Note that already fulfilledRequestLogAvailability
s in the child log will be propagated immediately.- Specified by:
endResponseWithLastChild
in interfaceRequestLogBuilder
-
children
public List<RequestLog> children()
Description copied from interface:RequestLog
Returns the list of childRequestLog
s, ordered by the time it was added.- Specified by:
children
in interfaceRequestLog
-
availabilities
public Set<RequestLogAvailability> availabilities()
Description copied from interface:RequestLog
Returns the set of satisfiedRequestLogAvailability
s.- Specified by:
availabilities
in interfaceRequestLog
-
isAvailable
public boolean isAvailable(RequestLogAvailability availability)
Description copied from interface:RequestLog
Returnstrue
if the specifiedRequestLogAvailability
is satisfied.- Specified by:
isAvailable
in interfaceRequestLog
-
isAvailable
public boolean isAvailable(RequestLogAvailability... availabilities)
Description copied from interface:RequestLog
Returnstrue
if all of the specifiedRequestLogAvailability
s are satisfied.- Specified by:
isAvailable
in interfaceRequestLog
-
isAvailable
public boolean isAvailable(Iterable<RequestLogAvailability> availabilities)
Description copied from interface:RequestLog
Returnstrue
if all of the specifiedRequestLogAvailability
s are satisfied.- Specified by:
isAvailable
in interfaceRequestLog
-
addListener
public void addListener(RequestLogListener listener, RequestLogAvailability availability)
Description copied from interface:RequestLog
Adds the specifiedRequestLogListener
so that it's notified when the specifiedRequestLogAvailability
is satisfied.- Specified by:
addListener
in interfaceRequestLog
-
addListener
public void addListener(RequestLogListener listener, RequestLogAvailability... availabilities)
Description copied from interface:RequestLog
Adds the specifiedRequestLogListener
so that it's notified when all of the specifiedRequestLogAvailability
s are satisfied.- Specified by:
addListener
in interfaceRequestLog
-
addListener
public void addListener(RequestLogListener listener, Iterable<RequestLogAvailability> availabilities)
Description copied from interface:RequestLog
Adds the specifiedRequestLogListener
so that it's notified when all of the specifiedRequestLogAvailability
s are satisfied.- Specified by:
addListener
in interfaceRequestLog
-
context
public RequestContext context()
Description copied from interface:RequestLog
Returns theRequestContext
associated with theRequest
being handled. This method returns non-null
regardless the currentRequestLogAvailability
.- Specified by:
context
in interfaceRequestLog
-
startRequest
public void startRequest(Channel channel, SessionProtocol sessionProtocol)
Description copied from interface:RequestLogBuilder
Starts the collection of information for theRequest
. This method sets the following properties:- Specified by:
startRequest
in interfaceRequestLogBuilder
-
requestStartTimeMillis
public long requestStartTimeMillis()
Description copied from interface:RequestLog
Returns the time when the processing of the request started, in millis since the epoch.- Specified by:
requestStartTimeMillis
in interfaceRequestLog
-
requestStartTimeNanos
public long requestStartTimeNanos()
Description copied from interface:RequestLog
Returns the time when the processing of the request started, in nanoseconds. This value can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time.- Specified by:
requestStartTimeNanos
in interfaceRequestLog
-
requestEndTimeNanos
public long requestEndTimeNanos()
Description copied from interface:RequestLog
Returns the time when the processing of the request finished, in nanoseconds. This value can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time.- Specified by:
requestEndTimeNanos
in interfaceRequestLog
-
requestDurationNanos
public long requestDurationNanos()
Description copied from interface:RequestLog
Returns the duration that was taken to consume or produce the request completely, in nanoseconds.- Specified by:
requestDurationNanos
in interfaceRequestLog
-
requestCause
public Throwable requestCause()
Description copied from interface:RequestLog
Returns the cause of request processing failure.- Specified by:
requestCause
in interfaceRequestLog
- Returns:
- the cause.
null
if the request was processed completely.
-
channel
public Channel channel()
Description copied from interface:RequestLog
- Specified by:
channel
in interfaceRequestLog
- Returns:
- the Netty
Channel
.null
if theRequest
has failed even before a connection is established.
-
sessionProtocol
public SessionProtocol sessionProtocol()
Description copied from interface:RequestLog
Returns theSessionProtocol
of theRequest
.- Specified by:
sessionProtocol
in interfaceRequestLog
-
serializationFormat
public SerializationFormat serializationFormat()
Description copied from interface:RequestLog
Returns theSerializationFormat
of theRequest
.- Specified by:
serializationFormat
in interfaceRequestLog
-
serializationFormat
public void serializationFormat(SerializationFormat serializationFormat)
Description copied from interface:RequestLogBuilder
Sets theSerializationFormat
.- Specified by:
serializationFormat
in interfaceRequestLogBuilder
-
scheme
public Scheme scheme()
Description copied from interface:RequestLog
- Specified by:
scheme
in interfaceRequestLog
-
requestLength
public long requestLength()
Description copied from interface:RequestLog
Returns the length of the request content.- Specified by:
requestLength
in interfaceRequestLog
-
requestLength
public void requestLength(long requestLength)
Description copied from interface:RequestLogBuilder
Sets theRequestLog.requestLength()
.- Specified by:
requestLength
in interfaceRequestLogBuilder
-
increaseRequestLength
public void increaseRequestLength(long deltaBytes)
Description copied from interface:RequestLogBuilder
Increases theRequestLog.requestLength()
bydeltaBytes
.- Specified by:
increaseRequestLength
in interfaceRequestLogBuilder
-
requestHeaders
public HttpHeaders requestHeaders()
Description copied from interface:RequestLog
Returns theHttpHeaders
of theRequest
. If theRequest
was not received or sent at all, it will return a dummyHttpHeaders
whose:authority
and:path
are set to"?"
,:scheme
is set to"http"
or"https"
, and:method
is set to"UNKNOWN"
.- Specified by:
requestHeaders
in interfaceRequestLog
-
requestHeaders
public void requestHeaders(HttpHeaders requestHeaders)
Description copied from interface:RequestLogBuilder
Sets theRequestLog.requestHeaders()
.- Specified by:
requestHeaders
in interfaceRequestLogBuilder
-
requestContent
public Object requestContent()
Description copied from interface:RequestLog
Returns the high-level content object of theRequest
, which is specific to theSerializationFormat
.- Specified by:
requestContent
in interfaceRequestLog
- Returns:
RpcRequest
for RPC, ornull
for others
-
requestContent
public void requestContent(@Nullable Object requestContent, @Nullable Object rawRequestContent)
Description copied from interface:RequestLogBuilder
Sets theRequestLog.requestContent()
and theRequestLog.rawRequestContent()
.- Specified by:
requestContent
in interfaceRequestLogBuilder
-
rawRequestContent
public Object rawRequestContent()
Description copied from interface:RequestLog
Returns the low-level content object of theRequest
, which is specific to theSerializationFormat
.- Specified by:
rawRequestContent
in interfaceRequestLog
- Returns:
ThriftCall
for Thrift, ornull
for others
-
deferRequestContent
public void deferRequestContent()
Description copied from interface:RequestLogBuilder
Allows theRequestLogBuilder.requestContent(Object, Object)
called afterRequestLogBuilder.endRequest()
. By default, ifRequestLogBuilder.requestContent(Object, Object)
was not called yet,RequestLogBuilder.endRequest()
will callrequestContent(null, null)
automatically. This method turns off this default behavior. Note, however, this method will not preventRequestLogBuilder.endRequest(Throwable)
from callingrequestContent(null, null)
automatically.- Specified by:
deferRequestContent
in interfaceRequestLogBuilder
-
isRequestContentDeferred
public boolean isRequestContentDeferred()
Description copied from interface:RequestLogBuilder
Returnstrue
ifRequestLogBuilder.deferRequestContent()
was ever called.- Specified by:
isRequestContentDeferred
in interfaceRequestLogBuilder
-
endRequest
public void endRequest()
Description copied from interface:RequestLogBuilder
SetsRequestLog.requestDurationNanos()
and finishes the collection of the information.- Specified by:
endRequest
in interfaceRequestLogBuilder
-
endRequest
public void endRequest(Throwable requestCause)
Description copied from interface:RequestLogBuilder
SetsRequestLog.requestDurationNanos()
and finishes the collection of the information.- Specified by:
endRequest
in interfaceRequestLogBuilder
-
startResponse
public void startResponse()
Description copied from interface:RequestLogBuilder
Starts the collection of information for theResponse
. This method setsRequestLog.responseStartTimeMillis()
.- Specified by:
startResponse
in interfaceRequestLogBuilder
-
responseStartTimeMillis
public long responseStartTimeMillis()
Description copied from interface:RequestLog
Returns the time when the processing of the response started, in millis since the epoch.- Specified by:
responseStartTimeMillis
in interfaceRequestLog
-
responseStartTimeNanos
public long responseStartTimeNanos()
Description copied from interface:RequestLog
Returns the time when the processing of the response started, in nanoseconds. This value can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time.- Specified by:
responseStartTimeNanos
in interfaceRequestLog
-
responseEndTimeNanos
public long responseEndTimeNanos()
Description copied from interface:RequestLog
Returns the time when the processing of the response finished, in nanoseconds. This value can only be used to measure elapsed time and is not related to any other notion of system or wall-clock time.- Specified by:
responseEndTimeNanos
in interfaceRequestLog
-
responseDurationNanos
public long responseDurationNanos()
Description copied from interface:RequestLog
Returns the duration that was taken to consume or produce the response completely, in nanoseconds.- Specified by:
responseDurationNanos
in interfaceRequestLog
-
responseCause
public Throwable responseCause()
Description copied from interface:RequestLog
Returns the cause of response processing failure.- Specified by:
responseCause
in interfaceRequestLog
- Returns:
- the cause.
null
if the response was processed completely.
-
responseLength
public long responseLength()
Description copied from interface:RequestLog
Returns the length of the response content.- Specified by:
responseLength
in interfaceRequestLog
-
responseLength
public void responseLength(long responseLength)
Description copied from interface:RequestLogBuilder
Sets theRequestLog.responseLength()
.- Specified by:
responseLength
in interfaceRequestLogBuilder
-
increaseResponseLength
public void increaseResponseLength(long deltaBytes)
Description copied from interface:RequestLogBuilder
Increases theRequestLog.responseLength()
bydeltaBytes
.- Specified by:
increaseResponseLength
in interfaceRequestLogBuilder
-
responseHeaders
public HttpHeaders responseHeaders()
Description copied from interface:RequestLog
Returns the non-informational statusHttpHeaders
of theResponse
. If theResponse
was not received or sent at all, it will return a dummyHttpHeaders
whose:status
is"0"
.- Specified by:
responseHeaders
in interfaceRequestLog
-
responseHeaders
public void responseHeaders(HttpHeaders responseHeaders)
Description copied from interface:RequestLogBuilder
Sets theRequestLog.responseHeaders()
.- Specified by:
responseHeaders
in interfaceRequestLogBuilder
-
responseContent
public Object responseContent()
Description copied from interface:RequestLog
Returns the high-level content object of theResponse
, which is specific to theSerializationFormat
.- Specified by:
responseContent
in interfaceRequestLog
- Returns:
RpcResponse
for RPC, ornull
for others
-
responseContent
public void responseContent(@Nullable Object responseContent, @Nullable Object rawResponseContent)
Description copied from interface:RequestLogBuilder
Sets theRequestLog.responseContent()
and theRequestLog.rawResponseContent()
.- Specified by:
responseContent
in interfaceRequestLogBuilder
-
rawResponseContent
public Object rawResponseContent()
Description copied from interface:RequestLog
Returns the low-level content object of theResponse
, which is specific to theSerializationFormat
.- Specified by:
rawResponseContent
in interfaceRequestLog
- Returns:
ThriftReply
for Thrift, ornull
for others
-
deferResponseContent
public void deferResponseContent()
Description copied from interface:RequestLogBuilder
Allows theRequestLogBuilder.responseContent(Object, Object)
called afterRequestLogBuilder.endResponse()
. By default, ifRequestLogBuilder.responseContent(Object, Object)
was not called yet,RequestLogBuilder.endResponse()
will callresponseContent(null, null)
automatically. This method turns off this default behavior. Note, however, this method will not preventRequestLogBuilder.endResponse(Throwable)
from callingresponseContent(null, null)
automatically.- Specified by:
deferResponseContent
in interfaceRequestLogBuilder
-
isResponseContentDeferred
public boolean isResponseContentDeferred()
Description copied from interface:RequestLogBuilder
Returnstrue
ifRequestLogBuilder.deferResponseContent()
was ever called.- Specified by:
isResponseContentDeferred
in interfaceRequestLogBuilder
-
endResponse
public void endResponse()
Description copied from interface:RequestLogBuilder
SetsRequestLog.responseDurationNanos()
and finishes the collection of the information. If aThrowable
cause has been set withRequestLogBuilder.responseContent(Object, Object)
, it will be treated as theresponseCause
for this log.- Specified by:
endResponse
in interfaceRequestLogBuilder
-
endResponse
public void endResponse(Throwable responseCause)
Description copied from interface:RequestLogBuilder
SetsRequestLog.responseDurationNanos()
and finishes the collection of the information.- Specified by:
endResponse
in interfaceRequestLogBuilder
-
totalDurationNanos
public long totalDurationNanos()
Description copied from interface:RequestLog
Returns the amount of time taken since theRequest
processing started and until theResponse
processing ended. This property is available only when bothRequestLogAvailability.REQUEST_START
andRequestLogAvailability.RESPONSE_END
are available.- Specified by:
totalDurationNanos
in interfaceRequestLog
-
toStringRequestOnly
public String toStringRequestOnly()
Description copied from interface:RequestLog
Returns the string representation of theRequest
, with no sanitization of headers or content.- Specified by:
toStringRequestOnly
in interfaceRequestLog
-
toStringRequestOnly
public String toStringRequestOnly(Function<HttpHeaders,HttpHeaders> headersSanitizer, Function<Object,Object> contentSanitizer)
Description copied from interface:RequestLog
Returns the string representation of theRequest
.- Specified by:
toStringRequestOnly
in interfaceRequestLog
- Parameters:
headersSanitizer
- aFunction
for sanitizing HTTP headers for logging. The result of theFunction
is what is actually logged as headers.contentSanitizer
- aFunction
for sanitizing request content for logging. The result of theFunction
is what is actually logged as content.
-
toStringResponseOnly
public String toStringResponseOnly()
Description copied from interface:RequestLog
Returns the string representation of theResponse
, with no sanitization of headers or content.- Specified by:
toStringResponseOnly
in interfaceRequestLog
-
toStringResponseOnly
public String toStringResponseOnly(Function<HttpHeaders,HttpHeaders> headersSanitizer, Function<Object,Object> contentSanitizer)
Description copied from interface:RequestLog
Returns the string representation of theResponse
.- Specified by:
toStringResponseOnly
in interfaceRequestLog
- Parameters:
headersSanitizer
- aFunction
for sanitizing HTTP headers for logging. The result of theFunction
is what is actually logged as headers.contentSanitizer
- aFunction
for sanitizing response content for logging. The result of theFunction
is what is actually logged as content.
-
-