Хорошая рутина общего назначения

Используя Adobe ColdFusion версии 8 и ниже, все мои cfqueries обернуты в ловушку try, которая вызывает функцию в database.cfc под названием "CatchError".

<cftry>
   <cfquery datasource="myDatasource">
   UPDATE TableName SET
   ...
   WHERE ID = <cfqueryparam cfsqltype="cf_sql_integer" value="#arguments.ID#">
   </cfquery>
   <cfcatch>
      <cfset local.result = Variables.objDatabase.CatchError(cfcatch)>
   </cfcatch>
</cftry>

Вопрос 1: Существует ли хороший хороший обработчик ошибок общего назначения, который учитывает все различные типы исключений (Любой, Приложение, База данных, Выражение, Блокировка, MissingInclude, Объект, Безопасность, Шаблон и SearchEngine)?

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

Q3: И я мог бы хотеть послать кому-нибудь электронное письмо, если это первая ошибка этого сеанса.

2 ответа

Решение

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

1. Soldarnal ответил на вопрос 1, и я склонен согласиться - много работы, чтобы попытаться поймать каждое место, где может возникнуть ошибка, такая как взаимодействие с базой данных, и лучше иметь глобальный обработчик ошибок, который перехватывает все ошибки и использует try / ловит в тех местах, где высока вероятность возникновения ошибки, и вы хотите, чтобы выполнение продолжалось (обычно, если ваш сайт не может получить доступ к вашей базе данных, он немного застрял).

2. Что касается ведения журнала, cflog является наиболее надежным, так как вы почти всегда можете войти в файл, если нет серьезных проблем с вашим сервером. cfmail следующий - сервер должен ставить в очередь любые письма, которые он не может отправлять, хотя есть и другие проблемы. Далее это cfhttp Вы можете регистрировать свои ошибки на внешнем сайте, хотя при отправке ошибки она должна быть исправлена, иначе вы ее потеряете. Наконец, вы можете войти в базу данных, но опять же, если это застряло.

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

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

В вашем application.cfc, в функции OnRequestStart, вы можете добавить эту строку:

<cferror type="EXCEPTION" exception="any" template="act-error.cfm">

Обычно в act-error.cfm вы хотите показать пользователю html, который указывает на то, что он обнаружил необработанное исключение (на более дружественном языке), а также некоторые дружественные ссылки. Кроме того, в act-error вы все равно можете получить доступ ко всем переменным, включая переменную error, чтобы делать то, что вы хотите (журнал, электронная почта, обновление переменной сеанса и т. Д.).

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

Редактировать - вот общий обработчик, использующий подход cferror: http://www.bennadel.com/blog/932-Ask-Ben-Handling-Errors-With-ColdFusion-CFError.htm

Другие вопросы по тегам