Как получить блок приложений обработки исключений (EHAB) для записи значений из свойства Exception.Data в журнале?Exception.Data информация отсутствует в журнале EntLib
try
{
// ...
}
catch (Exception ex)
{
ex.Data.Add("Hello", "World");
throw ex;
}
Исключение регистрируется правильно, но я не могу найти дополнительные данные в любом месте в записи журнала, созданные EHAB.
Насколько я понимаю, рекомендуется использовать дополнительную релевантную информацию самому исключению, как в приведенном выше примере. Вот почему я немного удивлен, что EHAB не включает это по умолчанию.
Могу ли я исправить это, изменив шаблон с помощью редактора шаблонов текстовых форматировщиков EntLib (снимок экрана ниже)? Я не могу найти информацию о различных «токенах», но я предполагаю, что ответ скрыт где-то с ними.
Text Formatter Template Editor http://img195.imageshack.us/img195/6614/capturegmg.png
Или мне действительно нужно реализовать свое собственное пользовательское форматирование для достижения этой цели?
EDIT/UPDATE:
Я делаю это в моем Global.asax.cs для того, чтобы избежать необходимости добавить вызов метода HandleException везде в моем коде:
using EntLib = Microsoft.Practices.EnterpriseLibrary;
using System;
namespace MyApp
{
public class Global : System.Web.HttpApplication
{
protected void Application_Error(object sender, EventArgs e)
{
// I have an "All Exceptions" policy in place...
EntLib.ExceptionHandling.ExceptionPolicy.HandleException(Server.GetLastError(), "All Exceptions");
// I believe it's the GetLastError that's somehow returning a "lessor" exception
}
}
}
Оказывается это не такой же, как это (что хорошо работает, и, по сути решает мою проблему):
try
{
// ...
}
catch (Exception ex)
{
ex.Data.Add("Hello", "World");
bool rethrow = ExceptionPolicy.HandleException(ex, "Log Only Policy");
throw ex;
}
Просматривая весь код и добавляя try-catch с вызовом HandleException, просто кажется ... ну, глупо. Я думаю, что моя проблема действительно в том, как использовать EHAB правильно, а не конфигурацию.
Любое предложение о том, как я могу правильно регистрировать все исключения на «глобальном уровне» в веб-приложении ASP.NET?
Я согласен с HandleException: в качестве рамки конструкция «if rethrow» на самом деле не предлагает много абстракции; вам все равно нужно перенести свой код с кодом «if rethrow» в каждом блоке catch. –