Хорошее общее назначение, попробуйте/поймать рутину

StackOverflow https://stackoverflow.com/questions/2313909

  •  22-09-2019
  •  | 
  •  

Вопрос

Используя Adobe Coldfusion версию 8 и ниже, все мои CFQueries обернуты в попытку, который вызывает функцию в 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>

Q1: Существует ли хороший ловчик ошибок общего назначения, который был записан, который учитывает все различные типы исключений (любые, приложение, база данных, выражение, блокировка, пропущенные, объект, безопасность, шаблон и поисковый инженер)?

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

Q3: И я мог бы по электронной почте по электронной почте, если это первая ошибка этого сеанса.

Это было полезно?

Решение

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

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-ошибке вы все равно можете получить доступ ко всем переменным, включая переменную ошибки, чтобы делать то, что вы хотите (журнал, электронная почта, обновить переменную сеанса и т. Д.).

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

РЕДАКТИРОВАТЬ - вот общий обработчик, использующий подход CFERROR:http://www.bennadel.com/blog/932-ask-ben-handling-errors-with-coldfusion-cferror.htm

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top