Записването на грешки е важна част от „обработването на грешки“. Накратко, когато възникнат определени грешки в програмите, вие искате да знаете за това. Това е особено важно при грешки.

Ти трябва да:

  1. знаят, че са се случили
  2. имате полезна информация за тях, за да можете да ги отстраните по-късно

Един от начините да направите това е да използвате услуга за наблюдение или регистриране на грешки. Някои примери са New Relic и Splunk. Те автоматично ще записват всички програмни грешки и други подобни.

По-специално, регистрирането е много полезно. Той записва много информация за това, което се случва във вашата програма. Това може да помогне много при отстраняване на грешки.

Като алтернатива можете ръчно да записвате информация за грешки.

Как ръчно да записвате грешки

Целта е да можете да видите грешките по-късно. Можете да постигнете това по различни начини.

Един от начините е ръчно записване на грешки в база данни.

За да направите това, можете:

  1. подгответе вашата база данни за запис на грешки
  2. настройте някакъв код за записване на грешки в базата данни
  3. настройте глобален манипулатор на грешки за улавяне на грешки. (Този манипулатор на грешки ще извика кода от стъпка 2)
  4. настройте крайна точка в задния край, така че предният край също да може да записва грешки. (Тази крайна точка ще извика кода от стъпка 2)

Например, можете да използвате база данни MongoDB с колекция за грешки. Всеки път, когато възникне грешка във вашето приложение, добавете информация за нея към колекцията. Можете да организирате информацията по какъвто желаете начин. Например, можете да организирате по типа грешка или изключение, по съобщението за грешка или по последния код в стека за извикване за грешката.

След като настроите това, можете да настроите глобален манипулатор на грешки. Този манипулатор на грешки ще бъде извикан при грешки, възникнали във вашето приложение. В манипулатора запишете грешката във вашата база данни.

Различните рамки и „среди“ предоставят различни начини за настройка на глобални манипулатори на грешки. Например в двигателя на играта Unity можете да използвате Application.logMessageReceived += Handler;. В предния край на уебсайт можете да използвате window.addEventListener('error', handler);.

И накрая, можете да настроите крайна точка, така че предният край също да може да записва грешки. След това предният край може да направи мрежова заявка с информация за възникналата грешка.

Ето примерно обаждане, което можете да направите от предния край:

function handleError(errorEvent) {
  const {error} = errorEvent;
  const data = {stack: error.stack, message: error.message, type: error.name};
  fetch('https://example.com/errors', {method: 'POST', body: JSON.stringify(data)});
}
window.addEventListener('error', handleError);

Функцията handleError по-горе се изпълнява всеки път, когато възникне грешка. Той създава обект с полезна информация за грешката. След това изпраща мрежова заявка до задния край. След това задната част ще запише информацията за грешката, така че да може да се види по-късно.

Каква информация да се записва

Искате възможно най-много полезна информация за грешката. Това ще ви помогне да го отстраните по-късно.

Статията „.NET най-добри практики за изключения“ има някои насоки за това. Адаптирани както за стойности на грешки, така и за изключения, те трябва да:

  • използвайте предварително зададените типове грешки на вашия език за програмиране, ако са уместни. Създавайте персонализирани типове само ако предварително дефинираните не са приложими.
  • ако създадете потребителски типове грешки:
  • те обикновено трябва да бъдат подкласове на основните типове грешки (ако използвате ООП език)
  • те могат по избор да имат персонализирани свойства (ако биха били полезни)
  • използвайте граматически правилни съобщения за грешки. Например „Файлът „foo.txt“ не може да бъде намерен.’.
  • включете локализирано низово съобщение във всяка грешка (ако приложението ви е локализирано)

Последни бележки

Така че това е всичко за тази статия. Надявам се, че ви е било полезно.

Както винаги, ако някои точки са пропуснати, или ако не сте съгласни с нещо, или имате някакви коментари или отзиви, моля, оставете коментар по-долу.

За следващите стъпки препоръчвам да разгледате другите статии в „серията за обработка на грешки“.

Добре, благодаря и до следващия път.

Кредити

Запис на снимка — Снимка от Krists Luhaers в Unsplash

Първоначално публикувано в https://programmingduck.com на 26 юли 2021 г.