public async Task ExceptionIndiactor(HttpContext httpContext, RequestLogModel requestLog, Exception ex) { Entities.RequestLog request; if (IgnoreRequest(requestLog.Path)) { request = requestLog.SavedLog as Entities.RequestLog; _dbContext.RequestLogs.Add(request); await _dbContext.SaveChangesAsync(); } else { request = await _dbContext.RequestLogs.FindAsync(requestLog.Id); } try { request.ResponseStatusCode = httpContext.Response.StatusCode; request.ExceptionMessage = ex.GetFullMessage(); request.ExceptionTitle = ex.Message; request.HadException = true; request.Failed = true; _stopwatch.Stop(); request.ProcessDuration = _stopwatch.Elapsed.TotalSeconds; await _dbContext.SaveChangesAsync(); } catch (Exception loggingException) { _logger.LogError(ex, "An error occured while processing the request."); _logger.LogError(loggingException, "Additionally, an error occured while logging it to database."); } }
public async Task Invoke(HttpContext httpContext, RequestLogger requestLogger) { var log = new RequestLogModel(); try { log = await requestLogger.RequestIndiactor(httpContext); using (var memStream = new MemoryStream()) { var originalResponseBody = httpContext.Response.Body; httpContext.Response.Body = memStream; httpContext.Items.Add("RequestLog", log); await _next(httpContext); memStream.Position = 0; log.Response = new StreamReader(memStream).ReadToEnd(); memStream.Position = 0; await memStream.CopyToAsync(originalResponseBody); httpContext.Response.Body = originalResponseBody; } await requestLogger.ResponseIndiactor(httpContext, log); } catch (Exception ex) { await requestLogger.ExceptionIndiactor(httpContext, log, ex); throw; } }
public static iAFWebHost.Models.RequestLogModel Map(Entities.RequestLog entity) { iAFWebHost.Models.RequestLogModel model = new RequestLogModel(); model.Id = entity.Id; model.DT = entity.DT; model.Raw = entity.Raw; model.Referrer = entity.Referrer; model.RemoteIP = entity.RemoteIP; model.RequestUrl = entity.RequestUrl; return model; }
public static iAFWebHost.Models.RequestLogModel Map(Entities.RequestLog entity) { iAFWebHost.Models.RequestLogModel model = new RequestLogModel(); model.Id = entity.Id; model.DT = entity.DT; model.Raw = entity.Raw; model.Referrer = entity.Referrer; model.RemoteIP = entity.RemoteIP; model.RequestUrl = entity.RequestUrl; return(model); }
public RequestLogModel Add(RequestLogModel requestLog) { var sql = @" insert into [dbo].[RequestLogs] ( [StartTime], [UserId], [Path], [Method], [Body], [RequestSize], [IpAddress], [ProcessDuration], [Failed], [HadException], [Response], [ResponseStatusCode], [ResponseSize], [ExceptionTitle], [ExceptionMessage] ) VALUES ( @StartTime, @UserId, @Path, @Method, @Body, @RequestSize, @IpAddress, @ProcessDuration, @Failed, @HadException, @Response, @ResponseStatusCode, @ResponseSize, @ExceptionTitle, @ExceptionMessage );" + "SELECT CAST(SCOPE_IDENTITY() as int)"; using var db = new SqlConnection(_connectionString); var id = db.Query <int>(sql, requestLog).Single(); requestLog.Id = id; return(requestLog); }
public void ResponseIndiactor(HttpContext httpContext, RequestLogModel requestLog) { if (_httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier) != null) { requestLog.UserId = int.Parse(_httpContextAccessor.HttpContext.User.FindFirstValue(ClaimTypes.NameIdentifier)); } requestLog.ResponseStatusCode = httpContext.Response.StatusCode; requestLog.ResponseSize = httpContext.Response.ContentLength; if (requestLog.ResponseSize > 5000) { requestLog.Response = "Too long"; } requestLog.Failed = httpContext.Response.StatusCode != 200; _stopwatch.Stop(); requestLog.ProcessDuration = _stopwatch.Elapsed.TotalMilliseconds; _requeustLogRepository.Update(requestLog); }
public void Update(RequestLogModel requestLog) { using var db = new SqlConnection(_connectionString); db.Query(@" update [dbo].[RequestLogs] SET [ProcessDuration] = @ProcessDuration, [Failed] = @Failed, [HadException] = @HadException, [Response] = @Response, [ResponseStatusCode] = @ResponseStatusCode, [ResponseSize] = @ResponseSize, [ExceptionTitle] = @ExceptionTitle, [ExceptionMessage] = @ExceptionMessage, [UserId] = @UserId WHERE Id = @Id " , requestLog); }
public async Task <RequestLogModel> RequestIndiactor(HttpContext httpContext) { _stopwatch.Start(); var request = new RequestLogModel { IpAddress = httpContext.Connection.RemoteIpAddress.ToString(), Path = httpContext.Request.Path, Method = httpContext.Request.Method, StartTime = DateTime.Now, }; if (httpContext.Request?.Body != null && !string.IsNullOrWhiteSpace(httpContext.Request.ContentType) && !httpContext.Request.ContentType.StartsWith("multipart/form-data", StringComparison.InvariantCultureIgnoreCase)) { #region Get Request Body // This condition is because I dont want to save usurs password into my database request.Body = await new StreamReader(httpContext.Request.Body).ReadToEndAsync(); var injectedRequestStream = new MemoryStream(); var bytesToWrite = Encoding.UTF8.GetBytes(request.Body); injectedRequestStream.Write(bytesToWrite, 0, bytesToWrite.Length); injectedRequestStream.Seek(0, SeekOrigin.Begin); httpContext.Request.Body = injectedRequestStream; if (request.Body.Contains("password\":")) { request.Body = "Not visible(password is in content)"; } #endregion } request.RequestSize = httpContext.Request.ContentLength; request.Id = _requeustLogRepository.Add(request).Id; return(new RequestLogModel { Id = request.Id, Body = request.Body, IpAddress = request.IpAddress, Method = request.Method, Path = request.Path, StartTime = request.StartTime, UserId = request.UserId, }); }
public RestApiFacade WriteReqLog() { this._reqLog = new RequestLogModel { LogId = _id, ClassName = this._executeModel.ClassName, MethodName = this._executeModel.MethodName, ExecuteParameter = this._executeModel.ExecuteParameter, }; if (!String.IsNullOrEmpty(this._executeModel.UaString)) { this._reqLog.UserAgent = (UserAgentModel)UserAgent.Parse(this._executeModel.UaString); } this._logger.Info(JsonConvert.SerializeObject(this._reqLog)); return(this); }
public void ExceptionIndiactor(HttpContext httpContext, RequestLogModel requestLog, Exception ex) { try { requestLog.ResponseStatusCode = httpContext.Response.StatusCode; requestLog.ExceptionMessage = JsonConvert.SerializeObject(ex); requestLog.ExceptionTitle = ex.Message; requestLog.HadException = true; requestLog.Failed = true; _stopwatch.Stop(); requestLog.ProcessDuration = _stopwatch.Elapsed.TotalSeconds; _requeustLogRepository.Update(requestLog); } catch (Exception loggingException) { throw (loggingException); // STORE THE LOG ON DISC } }
public async Task ResponseIndiactor(HttpContext httpContext, RequestLogModel requestLog) { if (IgnoreRequest(requestLog.Path)) { return; } var request = await _dbContext.RequestLogs.FindAsync(requestLog.Id); request.ResponseStatusCode = httpContext.Response.StatusCode; request.ResponseSize = httpContext.Response.ContentLength; request.Failed = httpContext.Response.StatusCode == 200 ? false : true; request.EntityTypeId = ((RequestLogModel)httpContext.Items["RequestLog"]).EntityTypeId; request.PropertyId = ((RequestLogModel)httpContext.Items["RequestLog"]).PropertyId; request.AppInstanceId = ((RequestLogModel)httpContext.Items["RequestLog"]).AppInstanceId; request.AppTypeId = ((RequestLogModel)httpContext.Items["RequestLog"]).AppTypeId; _stopwatch.Stop(); request.ProcessDuration = _stopwatch.Elapsed.TotalSeconds; await _dbContext.SaveChangesAsync(); }
public async Task Invoke(HttpContext httpContext) { var log = new RequestLogModel(); try { if ( httpContext.Request.Path != "/" && !httpContext.Request.Path.ToString().Contains(".js") && !httpContext.Request.Path.ToString().Contains(".mp3") && !httpContext.Request.Path.ToString().Contains(".ico") && !httpContext.Request.Path.ToString().Contains(".png")) { log = await RequestIndiactor(httpContext); using (var memStream = new MemoryStream()) { var originalResponseBody = httpContext.Response.Body; httpContext.Response.Body = memStream; httpContext.Items.Add("RequestLog", log); await _next(httpContext); memStream.Position = 0; log.Response = new StreamReader(memStream).ReadToEnd(); memStream.Position = 0; await memStream.CopyToAsync(originalResponseBody); httpContext.Response.Body = originalResponseBody; } ResponseIndiactor(httpContext, log); } else { await _next(httpContext); } } catch (Exception ex) { ExceptionIndiactor(httpContext, log, ex); } }