PDA

Ver la Versión Completa : Fichero de Texto: Log.txt


jsc
16-09-2011, 11:11:40
tengo una aplicacion casi acabada y tengo intencion de instalarla en un pc donde otra persona pueda trastear y hacer de todo con ella, de modo que de pie a que surjan posibles errores. dicen que cuatro ojos ven mas que dos asi que a modo de poder depurar errores de la aplicacion creo que no es mala idea
se me ha ocurrido hacer un fichero Log.txt en el que poder recoger cualquier incidencia de la aplicacion pero no se el metodo correcto para hacer esto;
haciendo pruebas, he conseguido añadir el error en el fichero pero claro, solo desde el evento de un objeto; es decir, por ejemplo si pulso el boton de conectar a la bd y se generara un error, llamo a la funcion para añadir el error en el fichero y lo agrego;bien, pero esto quiero hacerlo desde todos los objetos que tenga en la aplicación?tengo que llamar desde cada uno de ellos a dicha función como se me ocurre a primera vista?claro, si esto es asi, cómo puedo llamar desde otro formulario a un procedimiento del FormPrincipal?
existe alguna posibilidad a nivel de la aplicacion de controlar si existiera alguna excepcion llamar a la función?
El fichero Log.txt, ya estaria creado y solo se tendria que añadir el error en el: fecha, hora, nombre del formulario,nombre del objeto,error
lo que he conseguido hasta ahora es esto:

procedure registrolog (FormName,NomObjeto,S:string) ;
var Fich : TextFile ;
begin
if FileExists (ExtractFilePath(Application.ExeName)+'\Log\Log.txt')
then
begin
AssignFile (Fich,ExtractFilePath(Application.ExeName)+'\Log\Log.txt') ;
Append (Fich) ;
Writeln (Fich,DateToStr(Date),' ',TimeToStr(Time),' ',' ',FormName,' ',NomObjeto,' ',S);
Flush (Fich) ;
CloseFile (Fich) ;
end ;
end;


llamada al procedimiento

TRY
tablepwd.Active := False ; //pongo false en lugar de true para generar queriendo la excepcion y ver el resultado de lo que seria agregar el error en el fichero
if meditclave.Text = tablepwd.fieldbyname('clave').asstring then
...
EXCEPT ON Error:Exception do
begin
tablepwd.close ;
Messagedlg ('Error al abrir la Base de Datos'+#13+#13+'Error del Sistema: '+Error.Message,mtError,[mbOK],0);
REGISTROLOG (Screen.ActiveForm.Name,(Sender as TSpeedButton).name,Error.Message) ;
end;
END;


linea añadida en el fichero:


16/09/2011 11:05:42 frmmenu sbconectar tablepwd: Field 'clave' not found


Ya si no es mucho pedir, cual seria la forma de poder tabular correctamente el fichero Log.txt? yo lo hago de forma muy rudimentaria añadiendo espacios vacios pero no creo que sea lo suyo

me gustaria poder añadir en el fichero otro dato;seria el evento del objeto pero eso no lo he logrado

bueno, mucha informacion; espero que este claro lo que pretendo para ver si podeis ayudarme

Casimiro Notevi
16-09-2011, 14:02:08
Si he entendido bien, lo que necesitas es capturar el evento OnException del programa y desde allí tratar todos los errores.
Puedes crear un procedure en tu Form principal, algo así


private
{ Private declarations }
procedure AlSaltarExcepcion(Sender: TObject; E: Exception);
public
{ Public declarations }


Lo asignas al crear el Form, ejemplo:


procedure TFmain.FormCreate(Sender: TObject);
begin
Application.OnException := AlSaltarExcepcion;
end;


En tu procedure haces lo que creas conveniente, ejemplo:


procedure TFmain.AlSaltarExcepcion(Sender: TObject; E: Exception);
begin
GuardarError( E.Message );
end;


Y en GuardarError lo almacena en tu fichero log.


procedure GuardarError( cMensajeError:string );
var
F : TextFile;
cF : string;
begin
cF := ExtractFilePath(Paramstr(0))+FormatDateTime('yyyymmdd',now)+_FILELOGERROR_;
AssignFile( F, cF );
if FileExists( cF ) then
Append( F )
else
ReWrite( F );
//
Writeln( F, '--> ' + FormatDateTime('dddd dd/mm/yyyy hh:nn:ss',Now) );
WriteLn( F, cMensajeError );
WriteLn( F, '' );
Flush( F );
CloseFile( F );
end;


En fin, es sólo un ejemplo simplón, para que te hagas una idea.
Espero que sea lo que buscas.

jsc
16-09-2011, 18:48:40
en gran parte eso es lo que busco
muchas gracias Casimiro Notevi
como podria añadir el evento del componente que genero la excepción?
probare y si necesito algo más, lo comento
muchas gracias nuevamente