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
{
}