コード例 #1
0
        /// <summary>
        /// LogException 记录日志
        /// </summary>
        /// <param name="exContext"></param>
        private async Task LogException(ExceptionContext exContext)
        {
            var httpRequest = exContext.HttpContext;
            var request     = await httpRequest.Request.ReadRequestAsync();

            var response = exContext.Exception.GetSerializeObject();
            var log      = new ApiLog()
            {
                ConfirmNo       = httpRequest.Request.Path.Value,
                ModelName       = httpRequest.Request.Method,
                RequestContext  = request,
                ResponseContext = response
            };

            _logManager.Info(log.GetSerializeObject());
            LogManage.ExceptionLog(log);
            return;
        }
コード例 #2
0
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="keyNo">标示</param>
        /// <param name="modelName">模块名称</param>
        /// <param name="request">请求日志</param>
        /// <param name="response">响应日志</param>
        private void WriteClientLog(string keyNo, string modelName, string request, string response)
        {
            var log = new ApiLog()
            {
                ConfirmNo       = keyNo,
                ModelName       = modelName,
                RequestContext  = request,
                ResponseContext = response
            };

            _logger.LogInformation(log.GetSerializeObject());
            LogManage.HttpClientLog(new ApiLog()
            {
                ConfirmNo       = keyNo,
                ModelName       = modelName,
                RequestContext  = request,
                ResponseContext = response
            });
        }
コード例 #3
0
        /// <summary>
        /// 记录日志
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task Invoke(HttpContext context)
        {
            //设置request 可被多次读取
            context.Request.EnableBuffering();
            _stopwatch = new Stopwatch();
            _stopwatch.Start();
            _logger.LogInformation($"Handling request: " + context.Request.Path);
            var logModel = new ApiLog()
            {
                ConfirmNo = context.Request.Path.Value,
                ModelName = context.Request.Method,
            };

            //swagger
            if (!IsEncryRoute(context))
            {
                await _next.Invoke(context);
            }
            else
            {
                var request  = context.Request.Body;
                var response = context.Response.Body;
                try
                {
                    using (var newRequest = new MemoryStream())
                    {
                        //替换request 流
                        context.Request.Body = newRequest;
                        using (var newResponse = new MemoryStream())
                        {
                            //替换 response 流
                            context.Response.Body = newResponse;

                            //读取原始消息
                            using (var reader = new StreamReader(request))
                            {
                                //读取原始请求的消息
                                var originMessage = await reader.ReadToEndAsync();

                                logModel.RequestContext = originMessage;
                                if (string.IsNullOrEmpty(originMessage))
                                {
                                    await _next.Invoke(context);
                                }

                                logModel.RequestContext = originMessage.AesDescry();
                            }

                            using (var writer = new StreamWriter(newRequest))
                            {
                                await writer.WriteAsync(logModel.RequestContext);

                                await writer.FlushAsync();

                                newRequest.Position  = 0;
                                context.Request.Body = newRequest;
                                await _next(context);
                            }

                            using (var reader = new StreamReader(newResponse))
                            {
                                newResponse.Position = 0;
                                //logModel.ResponseContext = await reader.ReadToEndAsync();
                                var messageResponse = await reader.ReadToEndAsync();

                                if (messageResponse.IsNotWhiteSpace())
                                {
                                    try
                                    {
                                        var serizeObj    = messageResponse.GetDeserializeObject <ApiResult <object> >();
                                        var serizeString = string.Empty;
                                        if (serizeObj?.Result != null)
                                        {
                                            if (serizeObj.Result is string)
                                            {
                                                serizeString = (serizeObj.Result).ToString().AesEncry();
                                            }
                                            else
                                            {
                                                serizeString = serizeObj.Result.GetSerializeObject().AesEncry();
                                            }
                                        }
                                        logModel.ResponseContext = (new ApiResult <string>()
                                        {
                                            Success = serizeObj.Success,
                                            Code = serizeObj.Code,
                                            Message = serizeObj.Message,
                                            Result = serizeString
                                        }).GetSerializeObject();
                                    }
                                    catch (Exception e)
                                    {
                                        //不做任何的处理
                                    }
                                }
                                //if (logModel.ResponseContext.IsNotWhiteSpace())
                                //{
                                //    logModel.ResponseContext = logModel.ResponseContext.AesEncry();
                                //}
                            }

                            using (var writer = new StreamWriter(response))
                            {
                                await writer.WriteAsync(logModel.ResponseContext);

                                await writer.FlushAsync();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    _logger.LogError($" http中间件发生错误: " + ex.ToString());
                }
                finally
                {
                    context.Request.Body  = request;
                    context.Response.Body = response;
                }
            }
            //获取原始消息
            var stopTime1 = 0;

            context.Response.OnCompleted(() =>
            {
                _stopwatch.Stop();
                var stopTime = _stopwatch.ElapsedMilliseconds;
                _logger.LogDebug($"RequestLog:{DateTime.Now.ToString("yyyyMMddHHmmssfff") + (new Random()).Next(0, 10000)}-{stopTime}ms", $"{logModel.GetSerializeObject()}");
                return(Task.CompletedTask);
            });
            _logger.LogInformation($"Finished handling request.{_stopwatch.ElapsedMilliseconds}ms");


            //context.Response.OnCompleted(async o =>
            //{
            //    _stopwatch.Stop();
            //    if (o is HttpContext c)
            //    {
            //        var requestStr = await c.Request.ReadRequestAsync();
            //        var retStr = await c.Response.ReadBodyAsync();
            //        LogManage.ApiLog(new ApiLog()
            //        {
            //            ConfirmNo = c.Request.Path.Value,
            //            ModelName = c.Request.Method,
            //            RequestContext = requestStr,
            //            ResponseContext = retStr
            //        });
            //    }
            //}, context);
            //await _next(context);
        }