Форум: "Прочее";
Текущий архив: 2013.06.09;
Скачать: [xml.tar.bz2];
ВнизПрием для логирования/информирования Найти похожие ветки
← →
O'ShinW © (2013-02-01 11:13) [0]Пока писал, придумал :)
Но все равно, вдруг что посоветуете. (на случай если Кулибин был в предках / все украдено до нас)
класс для логирования/информирования об ошибках в программах(информирования себя, по почте или смс).
Основа - Список из записей
PErrorItem = ^TErrorItem;
TErrorItem = record
ErType: string;
ErText: string;
IncCountBetweenErrors: integer;
NextCountForSignal: Integer;
IncTimeBetweenErrors: TDateTime;
NextTimeForSignal: TDateTime;
LastTimeCall: TDateTime;
LastCountCall: Integer;
CountAll: Integer;
Count: Integer;
Time: TDateTime;
end;
Методы
procedure AddError(const ErText: string); overload;
procedure AddError(const ErType, ErText: string); overload;
procedure SetTimeRule(const ErType, ErText: string; IncTimeBetweenErrors: TDateTime); overload;
и т.п.
Допустим, Ошибка. Не важно какая.
пишем
EM.AddError("Не важно какая");
В списке создалась ошибка типа "NONE", с текстом "Не важно какая"
Если она опять случится EM.AddError("Не важно какая");,
тогда у записи инкриминируется счетчик Count, а при достижении NextCountForSignal дернется уведомление (пока не написал, может TErrorItem будет класс, пока не знаю)
Это ладно.
Когда программа общается с кучей железок по сети, ошибок может быть 100 в секунду.
Накой этот спам нужен.
Хотелось бы получить уведомление по первой, и следующее через час, если там все еще не наладилось
Тут метод SetTimeRule, который для всех ошибок по типу (ErType) или по тексту(ErText) (или и по тому и по др.) выставит соответствующее
IncTimeBetweenErrors: TDateTime;
или NextTimeForSignal: TDateTime;
Допустим, хочется выставить правила для ошибок, которых еще нет.
Тогда по SetTimeRule создаём ошибку, с Count = 0
И тут засада.
Создав ошибку по типу(SOmeType1), в поле текста имеем NONE
и наоборот.
Далее, случается так, что
добавляется следующая ошибка того же типа, но другого текста
EM.AddError(SomeType1, SomeText);
По идее, для SomeType1 уже задали правило, и к этой ошибке должно оно применяться тоже.
Но Как об этом узнать?
=====
Что придумал
Вместо >> создаём ошибку, с Count = 0
при юзании SetXXXXRule, создается другой, второй список, с практически аналогичными полями, где коллекционируются ошибки-правила.
Потом, при добавлении ошибки, она, сначала инициализируется всеми своими полями по совпадению из списка правил, не меняя в этом списке правил ничего, а потом добавляется.
← →
Игорь Шевченко © (2013-02-01 12:48) [1]ничего не понял
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.06.09;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.004 c