![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
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.