//private async Task FixUserName(HttpContext context) //{ // if (!context.Items.ContainsKey(FilterConstants.UserName) && // context.User?.Identity != null && // !string.IsNullOrEmpty(context.User.Identity.Name)) // { // context.Items.Add(FilterConstants.UserName, context.User.Identity.Name); // } // //else // //{ // // var authResult = await context.AuthenticateAsync("Bearer"); // // if (!context.Items.ContainsKey(FilterConstants.UserName) && !string.IsNullOrEmpty(authResult?.Principal?.Identity?.Name)) // // context.Items.Add(FilterConstants.UserName, authResult?.Principal?.Identity?.Name); // //} //} /// <summary> /// Финализация обработки запроса /// </summary> private async Task FinalizeResponse(MemoryStream memStream, Stream originalBody, HttpContext context, ILogger logger, WebApiLogMessage webApiLogMessage) { memStream.Position = 0; var responceBodyStream = new StreamReader(memStream); using (responceBodyStream) { string responseBody = responceBodyStream.ReadToEnd(); memStream.Position = 0; await memStream.CopyToAsync(originalBody); if (context.Items.ContainsKey("excpetionReceived")) { var webApiExceptionLogMessage = LogTools.CreateLogMessage <WebApiExceptionLogMessage>(context); webApiExceptionLogMessage.ExceptionReceived = context.Items["excpetionReceived"] as Exception; LogTools.WriteLogMessage(context, webApiExceptionLogMessage, logger, responseBody); } else { LogTools.WriteLogMessage(context, webApiLogMessage, logger, responseBody); } } }
/// <summary> /// Записать в лог ответ Action метода контроллера клиенту /// </summary> /// /// <param name="context">Контекст исполнения запроса</param> /// <param name="logMessage">Модель структурированного сообщения для логирования</param> /// <param name="logger"></param> public static void SetResponce(ResultExecutedContext context, WebApiLogMessage logMessage, ILogger logger) { if (logMessage.StatusCode > 399 || logger.IsEnabled(LogLevel.Debug)) { logMessage.HttpResponce = JsonConvert.SerializeObject(context.Result); } }
/// <summary> /// Записать идентификатор запроса /// </summary> /// /// <param name="context">Контекст исполнения запроса</param> /// <param name="logMessage">Модель структурированного сообщения для логирования</param> public static void SetRequestId(FilterContext context, WebApiLogMessage logMessage) { if (context.HttpContext.Items.ContainsKey(FilterConstants.RequestId)) { logMessage.RequestId = context.HttpContext.Items[FilterConstants.RequestId].ToString(); } }
/// <summary> /// Записать в лог текущего пользователя /// </summary> /// /// <param name="context">Контекст исполнения запроса</param> /// <param name="logMessage">Модель структурированного сообщения для логирования</param> public static void SetUserName(FilterContext context, WebApiLogMessage logMessage) { if (context.HttpContext.Items.ContainsKey(FilterConstants.UserName)) { logMessage.UserName = context.HttpContext.Items[FilterConstants.UserName]?.ToString(); } }
/// <summary> /// Установить длительность выполнения запроса /// </summary> /// /// <param name="context">Контекст исполнения запроса</param> /// <param name="logMessage">Модель структурированного сообщения для логирования</param> public static void SetDuration(FilterContext context, WebApiLogMessage logMessage) { if (!context.HttpContext.Items.TryGetValue(FilterConstants.Stopwatch, out var stopWatchObject)) { return; } if (!(stopWatchObject is Stopwatch stopwatch)) { return; } stopwatch.Stop(); logMessage.DurationMilliseconds = stopwatch.ElapsedMilliseconds; }
/// <summary> /// Записать в лог статус ответа Action функции клиенту /// </summary> /// /// <param name="context">Контекст исполнения запроса</param> /// <param name="logMessage">Модель структурированного сообщения для логирования</param> public static void SetStatusCode(ExceptionContext context, WebApiLogMessage logMessage) { if (context.Result == null) { return; } var property = context.Result.GetType().GetProperty("StatusCode"); if (property == null) { return; } var value = property.GetValue(context.Result); if (int.TryParse(value.ToString(), out var code)) { logMessage.StatusCode = code; } }