Вы могли бы также хотеть изучить вероятностное соответствие.
Я вставляю ниже код, который использую в моем global.asax, который, кажется, меня удовлетворяет на данный момент .. Я получаю все необработанные исключения в моих файлах журнала, созданных log4net ..
public class MvcApplication : System.Web.HttpApplication
{
private static readonly ILog log = LogManager.GetLogger(typeof(MvcApplication));
void Application_Error(Object sender, EventArgs e)
{
Exception ex = Server.GetLastError().GetBaseException();
log.Error("App_Error", ex);
}
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
log4net.Config.XmlConfigurator.Configure();
}
}
Возможно, вам будет интересно узнать, что Аспектно-ориентированное программирование (АОП) есть.
Мы достигли этого с помощью Post sharp (только - мы не использовали log4net, а настраиваемый трассировщик).
Просто сначала проверьте, нет ли в log4net чего-нибудь для этого «нестандартного». Я не уверен в этом.
Без шуток вот и .
try
{
NotImplementedException nie = new NotImplementedException();
throw nie;
}
catch (Exception e)
{
Log.Fatal(e);
}
Предполагая, что вы используете .net 3.5, вы можете использовать методы расширения и расширить System.Exception и добавить метод Log (log4net.ILog log), а затем, где бы вы ни перехватили исключение в своем приложении, если вы правильно настроили экземпляр журнала, тогда вы легко это сделаете. Ваш класс расширения может немного вырасти с различными перегрузками для Debug, Info, Warn, Error, Fatal и т. Д.
В log4net нет встроенной поддержки для этого. Вы должны реализовать событие Application_Error в Global.asax и вызвать там свой регистратор log4net. Событие будет инициировано для всех необработанных событий в вашем приложении.