Пример #1
0
        public override void OnActionExecuted(HttpActionExecutedContext context)
        {
            base.OnActionExecuted(context);

            var stopwatch      = (Stopwatch)context.Request.Properties[StopwatchKey];
            var apiAccessEvent = new ApiAccessEvent(context.Request, context.Response, stopwatch.ElapsedMilliseconds);

            var statusCode = context.Response?.StatusCode;

            var isSuccess = context.Response != null && context.Response.IsSuccessStatusCode;
            var isWarning = !isSuccess && statusCode.HasValue && statusCode != HttpStatusCode.InternalServerError;

            if (isSuccess)
            {
                Log.Debug("Api successful access: {@ApiAccess}", apiAccessEvent);
            }
            else
            {
                var exception = GetHandledException(context);

                if (isWarning)
                {
                    Log.Warning(exception, "Api unsuccessful access: {@ApiAccess}", apiAccessEvent);
                }
                else
                {
                    Log.Error(exception, "Api error: {@ApiAccess}", apiAccessEvent);
                }
            }
        }
Пример #2
0
        public async Task Invoke(HttpContext httpContext, ILogger <ApiAccessLoggingMiddleware> logger)
        {
            try
            {
                var start = Stopwatch.GetTimestamp();

                await requestDelegate(httpContext);

                var elapsed = GetElapsedMilliseconds(start, Stopwatch.GetTimestamp());

                var apiAccessEvent = new ApiAccessEvent(httpContext.Request, httpContext.Response, elapsed);

                var statusCode = httpContext.Response?.StatusCode;

                var level = LogLevel.Warning;
                if (statusCode == null || statusCode > 499)
                {
                    level = LogLevel.Error;
                }
                else if (statusCode >= 200 && statusCode <= 299)
                {
                    level = LogLevel.Debug;
                }

                Exception exception;
                switch (level)
                {
                case LogLevel.Error:
                    exception = GetHandledException(httpContext);
                    logger.LogError(exception, "Api error: {@ApiAccess}", apiAccessEvent);
                    break;

                case LogLevel.Warning:
                    exception = GetHandledException(httpContext);
                    logger.LogWarning(exception, "Api unsuccessful access: {@ApiAccess}", apiAccessEvent);
                    break;

                case LogLevel.Debug:
                    logger.LogDebug("Api successful access: {@ApiAccess}", apiAccessEvent);
                    break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
                throw;
            }
        }