//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);
                }
            }
        }
Exemple #2
0
 /// <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);
     }
 }
Exemple #3
0
 /// <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();
     }
 }
Exemple #4
0
 /// <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();
     }
 }
Exemple #5
0
        /// <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;
        }
Exemple #6
0
        /// <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;
            }
        }