Использование блока обработки исключений в Enterprise Library - PullRequest
0 голосов
/ 03 января 2009

У нас есть приложение ASP.NET, которое использует блок приложения обработки исключений для регистрации нашего исключения в базе данных (косвенно используя блок регистрации). Это все работает идеально. Тем не менее, поскольку он использует блок обработки исключений для регистрации данных, каждый раз, когда мы хотим регистрировать данные, нам придется создавать новый объект System.Exception. Поскольку мы не выкидываем исключения, проблем с производительностью нет. Однако нам нужно создавать новый объект исключения каждый раз, когда мы хотим что-то записать. Это плохой дизайн?

Ответы [ 3 ]

3 голосов
/ 03 января 2009

Вы можете определить политику ведения журнала независимо от политики обработки исключений, они не должны использоваться вместе.

Обработка исключений и ведение журнала много раз используются вместе через цепочку слушателей. Например, вы можете поймать конкретную ошибку в блоке catch и сослаться на вашу политику обработки исключений, которая также может включать в себя действия по регистрации через logCategory.

С другой стороны, чтобы выполнять запись только определенных событий / действий, просто укажите прослушиватель трассировки журнала, на который нет ссылки из политики обработки исключений. Выведите сообщение журнала с помощью оператора Trace.Write.

В любом случае, если вы создаете разные политики, вы можете при необходимости цеплять слушателей для большей гибкости.

Обновление: В разделе «loggingConfiguration» настройте другой прослушиватель трассировки. Затем вам нужно добавить прослушиватель в разделе categorySources файла web.config. Ниже показано, как войти в два источника: журнал событий и XML-файл.

<categorySources>       
<add switchValue="All" name="Database Events">
    <listeners>
        <add name="Formatted EventLog TraceListener"/>
        <add name="XML TraceListener"/>
    </listeners>
</add></categorySources>

В разделе «Исключения» убедитесь, что вы подключили свою категорию «События базы данных» к своей политике: (некоторые детали опущены для удобства чтения)

<exceptionHandling>
<exceptionPolicies>
    <add name="Data Access Policy">
            <exceptionTypes>
                <add type="System.OverflowException, mscorlib, ... postHandlingAction="NotifyRethrow" name="OverflowException">
                    <exceptionHandlers>
                        <add logCategory="Database Events" eventId="100" ... severity="Critical" name="Logging Handler"/>
                        <add exceptionMessage="Overflow Exception caught." ... >
                    </exceptionHandlers>
                </add>
            </exceptionTypes>
    </add>  
</exceptionPolicies></exceptionHandling>

Таким образом, конечный результат в этом случае - объединение двух слушателей, на которые ссылалась одна политика. Обратите внимание, что он обрабатывается из типа исключения system.overflow - просто пример того, как вы можете указать разные обработчики для разных исключений.

И, конечно, вы можете просто добавить прослушиватель файла журнала и вызывать его из своего кода, когда вам нужно зарегистрировать событие / действие, не полагаясь на обработку исключений. Дайте мне знать, если вы хотите более подробно.

0 голосов
/ 03 января 2009

Поскольку вы уже используете блок приложения ведения журнала и EL (даже если это косвенно), вы должны просто иметь возможность регистрироваться в базе данных через нее, а не обновлять исключение исключительно для целей ведения журнала.

Я тоже люблю ELMAH для обработки исключений. Я использую это для регистрации необработанных исключений и log4net для всех остальных журналов.

0 голосов
/ 03 января 2009

Я бы так не сказал. Это блок обработки исключений, а не блок регистрации. Возможно, вам следовало использовать ЛАБ ЭЛ вместо этого?

Кстати, я люблю и использую ELMAH в качестве блока обработки исключений. Он также не предназначен для регистрации, только для обработки исключений и регистрации их для проверки позже. Однако я думаю, что есть способ вызвать событие исключения, не обновляя объект Exception.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...