Хорошая рутина общего назначения - PullRequest
4 голосов
/ 22 февраля 2010

Используя 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 ]

2 голосов
/ 25 февраля 2010

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

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

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

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

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

1 голос
/ 23 февраля 2010

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

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

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

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

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

...