Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Exception [D5, Win95/98, WinME, NT4, Win2k, WinXP]


SteppesSon ©   (2005-05-20 09:17:00) 

Возникла необходимость ведения лога ошибок в файл. В лог хотелось добавить хотя-бы ИмяКомпонентаВызвавшегоОшибку и МетодВызвавшийОшибку. Пробовал сам, но добился лишь имя формы, а не компонента, вызвавшего ошибку. заранее спасибо.


Slym   (2005-05-20 11:01:00) [1]

unit ErrorLogUn;

interface
uses sysutils,Forms,windows,Classes;
type
 TErrorLogger=class
 private
   FFileName:string;
 public
   constructor Create;
   procedure DoLogException(const Sender: string; E: Exception);
   procedure OnException(Sender: TObject; E: Exception);
   procedure Exception(Sender: TObject; E: Exception);
 end;

var ErrorLogger:TErrorLogger;
implementation

{ TErrorLogger }

constructor TErrorLogger.Create;
begin
 FFileName:=ExtractFilePath(ParamStr(0))+'Error.log';
end;

procedure TErrorLogger.DoLogException(const Sender: string; E: Exception);
var hFile:Text;
begin
 AssignFile(hFile,FFileName);
 {$i-}
 if FileExists(FFileName) then
   Append(hFile)
 else
   Rewrite(hFile);
 {$i+}
 if IOResult0 then Exit;
 Writeln(hFile,DateTimeToStr(Now),'> Sender: "',Sender,'", exception: "',E.ClassName,'", message: "',E.Message,'"');
 CloseFile(hFile);
end;

procedure TErrorLogger.Exception(Sender: TObject; E: Exception);
begin
 if Sender is TComponent then
   DoLogException(TComponent(Sender).Name+'('+Sender.ClassName+')',E)
 else
   DoLogException(Sender.ClassName,E)
end;

procedure TErrorLogger.OnException(Sender: TObject; E: Exception);
begin
 Exception(Sender, E);
 if not Application.Terminated then
 begin
   if Application.MessageBox(PChar(E.Message+#13#10'Çàâåðøèòü ïðèëîæåíèå?'),PChar(Application.Title+': Ôàòàëüíàÿ îøèáêà!'),MB_YESNO or MB_ICONERROR)= ID_YES then
     Application.Terminate;
 end else Halt(1);
end;

initialization
 if not assigned(ErrorLogger) then
   ErrorLogger:=TErrorLogger.Create;
 Application.OnException:=ErrorLogger.OnException;

finalization
 if assigned(ErrorLogger) then
   ErrorLogger.Free;

end.


Наверх

Титульная страница Поиск, карта сайта Написать письмо