ttajic
6/2/2017 - 10:25 AM

asp.net mvc Error Handling to Log

asp.net mvc Error Handling to Log

using System.Web.Mvc;

namespace Web.Environment { 
    public class LogErrorsAttribute : FilterAttribute, IExceptionFilter
    {
        #region IExceptionFilter Members
        void IExceptionFilter.OnException(ExceptionContext filterContext)
        {
            if (filterContext != null && filterContext.Exception != null)
            {
                string controller = filterContext.RouteData.Values["controller"].ToString();
                string action = filterContext.RouteData.Values["action"].ToString();
                string loggerName = string.Format("{0}Controller.{1}", controller, action);

                log4net.LogManager.GetLogger(loggerName).Error(string.Empty, filterContext.Exception);
            }
        }
        #endregion
    }
}
using System.Reflection;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using Adacta.Porsche.CallCenter.Web.Config;
using Adacta.Porsche.CallCenter.Web.Environment;
using Adacta.Porsche.CallCenter.Web.Services;
using Adacta.Porsche.CallCenter.Web.Services.Interfaces;
using Autofac;
using Autofac.Configuration;
using Autofac.Integration.Mvc;
using Newtonsoft.Json;

namespace Web
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            CreateHostContainer();

            AreaRegistration.RegisterAllAreas();
            GlobalConfiguration.Configure(WebApiConfig.Register);
            RouteConfig.RegisterRoutes(RouteTable.Routes);           

            Mappings.Initialize();

            log4net.Config.XmlConfigurator.Configure();
            // Configure Json.NET formatter
            //var jsonSettings = new JsonSerializerSettings { ContractResolver = new JsonContractResolver() };
            //GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = jsonSettings;
        }

        public static IContainer CreateHostContainer()
        {
            var assembly = Assembly.GetExecutingAssembly();
            var builder = new ContainerBuilder();

            builder.RegisterModule(new ConfigurationSettingsReader("autofac"));
            builder.RegisterControllers(assembly);

            builder.RegisterType<CrmService>()
               .As<ICrmService>();
               //.SingleInstance(); <- this just plain wrong, singleton with user context changes dont really mix well

            builder.RegisterType<SqlSearchService>().As<ISqlSearchService>();
            builder.RegisterType<CallCenterService>().As<ICallCenterService>();
            builder.RegisterType<ConnectionService>().As<IConnectionService>().SingleInstance();
            
            // Build and setup MVC resolvers
            var container = builder.Build();

            DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

            return container;
        }
    }
}
//Sample: using attribute

using Web.Environment;
    
    [LogErrors]
    public class CallController : Controller
    {
    }