Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Решение проблемы логирования ошибок в фоновых потоках с использованием EurekaLog и Delphi 10

Delphi , Компоненты и Классы , Потоки

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

Шаг 1: Использование TThreadEx вместо TThread

Для корректной работы EurekaLog в фоновых потоках необходимо использовать класс TThreadEx вместо TThread. Это позволяет EurekaLog автоматически обрабатывать ошибки в потоках.

type
  TThrdSincArquivos = class(TThreadEx)
  // Остальная часть класса
end;

Шаг 2: Настройка EurekaLog для фоновых потоков

Убедитесь, что в настройках EurekaLog включена поддержка многопоточности. Это можно сделать через компонент TEurekaLogEvents и настройку события OnExceptionAction.

procedure TForm1.FormCreate(Sender: TObject);
begin
  with TEurekaLogEvents.Create(Self) do
    try
      OnExceptionAction := ExceptionAction;
      // Настройка других параметров
    finally
      Free;
    end;
end;

function TForm1.ExceptionAction(Const AEurekaAction: AEurekaActions): Boolean;
begin
  if AEurekaAction = atShowingExceptionInfo then
    Result := not AExceptionInfo.ThreadID = GetCurrentThreadID;
  else
    Result := True;
end;

Шаг 3: Обработка исключений в фоновых потоках

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

procedure TThrdSincArquivos.Execute;
begin
  inherited;
  try
    // Основной код потока
  except
    on E: Exception do
    begin
      // Логирование ошибки
      oLog.GravarLog(E, 'TThrdSincArquivos.Execute');
      // Дополнительные действия, если необходимо
    end;
  end;
end;

Шаг 4: Автоматическая обработка ошибок в TThreadEx

Если используется класс TThreadEx, можно автоматически обрабатывать ошибки при завершении потока, установив свойство AutoHandleException в True.

type
  TMyThread = class(TThreadEx)
  protected
    procedure Execute; override;
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Thread: TMyThread;
begin
  Thread := TMyThread.Create(True, 'My thread');
  Thread.AutoHandleException := True;
  Thread.FreeOnTerminate := True;
  Thread.Start;
  Thread := nil; // Не обращаться к переменной Thread после Start, если установлено FreeOnTerminate
end;

Заключение

При правильной настройке EurekaLog и использовании классов TThreadEx и TEurekaLogEvents можно добиться корректного логирования ошибок в фоновых потоках без отображения диалоговых окон. Это позволит эффективно отлаживать приложения и получать полную информацию об ошибках, возникающих в фоновых задачах.

Создано по материалам из источника по ссылке.

Решение проблемы логирования ошибок в фоновых потоках с использованием EurekaLog и Delphi 10, включая настройку компонентов и обработку исключений.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




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


:: Главная :: Потоки ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-12-22 20:14:06
2025-06-16 16:16:02/0.0049159526824951/1