using BuddyFinance.Admin.Models; using Microsoft.AspNetCore.Mvc.Filters; using Microsoft.Extensions.Configuration; using System; namespace BuddyFinance.Admin.Filters { public class LogExceptionAttribute : ExceptionFilterAttribute { private string env = ""; private int? userId = SessionManager.Current?.CurrentUser.UserId; public LogExceptionAttribute(IConfiguration configuration, BuddyFinanceDbContext dbContext) { Configuration = configuration; DbContext = dbContext; env = Configuration.GetValue("env", ""); } public IConfiguration Configuration { get; } public BuddyFinanceDbContext DbContext { get; } public override void OnException(ExceptionContext context) { var area = ""; var area_ = context.RouteData.Values["area"]; if (area_ == null) area = "Web"; else area = (string)area_; var action = context.RouteData.Values["action"].ToString(); var contoller = context.RouteData.Values["controller"].ToString(); var ip = context.HttpContext.Connection.RemoteIpAddress.ToString(); var userAgent = context.HttpContext.Request.Headers.ContainsKey("User-Agent") ? context.HttpContext.Request.Headers["User-Agent"].ToString() : ""; var exception = context.Exception; //Logger.Log(Integration.Models.Enums.LogTypeEnum.Error, // $"BuddyFinance {area} {env} - Error Excecuting action: {action}, controller: {contoller}, Exception: {exception.Message}. \n\n " + exception.ToString(), // userId, ip, userAgent); try { DbContext.ActivityLog.Add(new ActivityLog { Type = Integration.Models.Enums.LogTypeEnum.Error.ToString(), Description = $"Error Excecuting action {action} in controller {contoller}, Exception: {exception.Message}. \n\n " + exception.ToString(), UserId = userId, IpAddress = ip, UserAgent = userAgent, TimeStamp = DateTime.Now }); DbContext.SaveChanges(); } catch (Exception) { //Ignored || log to file ??? } base.OnException(context); } } }