protected RequestLogEntry CreateEntry(IRequest request, object requestDto, object response, TimeSpan requestDuration, Type requestType)
{
var entry = new RequestLogEntry
{
Id = Interlocked.Increment(ref requestId),
DateTime = DateTime.UtcNow,
RequestDuration = requestDuration,
};
if (request != null)
{
entry.HttpMethod = request.Verb;
entry.AbsoluteUri = request.AbsoluteUri;
entry.PathInfo = request.PathInfo;
entry.IpAddress = request.UserHostAddress;
entry.ForwardedFor = request.Headers[HttpHeaders.XForwardedFor];
entry.Referer = request.Headers[HttpHeaders.Referer];
entry.Headers = request.Headers.ToDictionary();
entry.UserAuthId = request.GetItemStringValue(HttpHeaders.XUserAuthId);
entry.Items = SerializableItems(request.Items);
entry.Session = EnableSessionTracking ? request.GetSession() : null;
}
var isClosed = request.Response.IsClosed;
if (!isClosed)
{
entry.UserAuthId = request.GetItemOrCookie(HttpHeaders.XUserAuthId);
entry.SessionId = request.GetSessionId();
}
if (HideRequestBodyForRequestDtoTypes != null
&& requestType != null
&& !HideRequestBodyForRequestDtoTypes.Contains(requestType))
{
entry.RequestDto = requestDto;
if (request != null)
{
if (!isClosed)
{
entry.FormData = request.FormData.ToDictionary();
}
if (EnableRequestBodyTracking)
{
entry.RequestBody = request.GetRawBody();
}
}
}
if (!response.IsErrorResponse())
{
if (EnableResponseTracking)
entry.ResponseDto = response.GetResponseDto();
}
else
{
if (EnableErrorTracking)
entry.ErrorResponse = ToSerializableErrorResponse(response);
}
return entry;
}