Хорошая рутина общего назначения
Используя 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