private static async Task LogRequest( NancyContext ctx, ILifetimeScope requestContainer, HttpStatusCode?statusCode = null) { var repository = requestContainer.Resolve <IAccessLogRepository>(); var logger = requestContainer.Resolve <ILogger>(); try { var processingTime = CalculateProcessingTime(ctx); var sensitiveInfoInPathRegex = ctx.GetRegexForSensitiveInfoInPath(); var actionStr = sensitiveInfoInPathRegex != null ? sensitiveInfoInPathRegex.Replace(ctx.Request.Path, SensitiveInfoReplacement) : ctx.Request.Path; var logEntry = new AccessLogEntry { Action = Truncate(actionStr, 255), Method = Truncate(ctx.Request.Method, 15), ClientIp = Truncate(ctx.GetClientHost(), 255), StatusCode = (int?)(statusCode ?? ctx.Response?.StatusCode), ProcessedAt = DateTime.UtcNow, UserAgent = Truncate(string.Join(", ", ctx.Request.Headers["User-Agent"]), 255), UserId = Truncate(ctx.CurrentUser?.Identity?.Name, 128), ProcessingTime = processingTime, Referer = Truncate(ctx.Request.Headers.Referrer, 255), AcceptLanguage = ctx.Request.Headers["Accept-Language"].Any() ? Truncate(string.Join("|", ctx.Request.Headers["Accept-Language"]), 255) : null, }; await repository.Insert(logEntry); } catch (Exception ex) { logger.Error(ex, "LogRequest error"); } }