Ver Mensaje Individual
  #4  
Antiguo 24-06-2006
Avatar de Delphius
[Delphius] Delphius is offline
Miembro Premium
 
Registrado: jul 2004
Ubicación: Salta, Argentina
Posts: 5.582
Reputación: 27
Delphius Va camino a la fama
vtdeleon:

La verdad es que de lo que leí, se comenta que se hace con componentes de la JEDI, y no hago uso de esas librerías, ya que hasta el momento no tuve necesidad de usarlas...

Yo cuento por el momento este código:
Código Delphi [-]
unit UErrorLog;
{******************************************************************************
 * UERRORLOG 1.0                                                              *
 ******************************************************************************
 Unidad: UErrorLog
 Versión: 1.0
 Fecha-Hora: 29/04/2006 - 03:33 pm
 Para: Delphi 6
 Autor: Delphius
 ******************************************************************************
 Descripción:
   La unidad UErrorLog permite llevar un registro de todas las excepciones y/o
 errores que se detectaron en una aplicación determinada. Dicho registro tiene
 una estructura como la siguiente:
 hh:mm:ss NombreExcepcion: DescripciónExcepcion

   Para hacer empleo de esta unidad, sólo hay que indicar en que parte del pro-
 grama se desea comenzar a detectar las excepciones mediante el procedimiento
 StartLog(), el cual recibe el directorio completo de donde se desea guardar el
 mismo.

   Esta unidad fue extraída de "La Cara Oculta de Delphi 4", escrita por Ian
 Marteens; ¡Espero que sepas perdonarme Ian! Por lo que se agradece el gesto
 de "querer compartir" tus ejemplos a muchos... por lo menos a mí éste me viene
 al pelo para llevar un control de mi "productividad"  y la calidad de los sis-
 temas que hago.
 ******************************************************************************
 Historial:
   - versión 1.0
 ******************************************************************************}

interface
  {* Procedimientos incorporados *}
  procedure StartLog(const AFileName: string);
  procedure StopLog;

implementation

uses
  SysUtils, Forms;

type
  {* Estructura del log *}
  TExceptionLog = class
    protected
      {** Declaraciones protegidas **}
      SavedHandler: TExceptionEvent;
      FileName: string;
      procedure ExceptionHandler(Sender: TObject; E: Exception);
    public
      {** Declaraciones públicas **}
      constructor Create(const AFileName: string);
      destructor Destroy; override;
  end; {* Fin TExceptionLog *}

var
  Log: TExceptionLog = Nil;

procedure StartLog(const AFileName: string);
{******************************************************************************
 Inicia el log que será guardado en un directorio específico.
 * Parámetro *
   AFileName: Directorio en donde guardar el log
 ******************************************************************************}
begin
  if NOT Assigned(Log)
     then Log := TExceptionLog.Create(AFileName);
end; {* Fin P. StartLog *}

procedure StopLog;
{******************************************************************************
 Detiene la ejecución del log.
 ******************************************************************************}
begin
  if Assigned(Log)
     then begin
            Log.Free;
            Log := Nil;
          end;
end; {* Fin P. StopLog *}

{* ---- TExceptionLog ---- *}
procedure TExceptionLog.ExceptionHandler(Sender: TObject; E: Exception);
{******************************************************************************
 Crea un registro en el log al capturar una excepción y/o error.
 * Parámetro *
 Sender: Objeto que levanta la excepción.
 E: Tipo de excepción levantada
 ******************************************************************************}
var Txt: TextFile;
begin
 Application.ShowException(E);
 try
   AssignFile(Txt,FileName);
   try
     Append(Txt);
   except
     Rewrite(Txt);
   end;
   try
     writeln(Txt, FormatDateTime('hh:nn:ss',Now)+' '+ E.ClassName +': '+E.Message +' - '+Sender.ClassName);
   finally
     CloseFile(Txt);
   end;
 except
 end;
end; {* Fin P. ExceptionLog.ExceptionHandler *}

constructor TExceptionLog.Create(const AFileName: string);
{******************************************************************************
 Crea un objeto de la clase TExceptionLog.
 * Parámetro *
 AFileName: Directorio en donde llevar a cabo el log.
 ******************************************************************************}
begin
  inherited Create;
  FileName := AFileName;
  SavedHandler := Application.OnException;
  Application.OnException := ExceptionHandler;
end; {* Fin C. TExceptionLog-Create *}

destructor TExceptionLog.Destroy;
{******************************************************************************
 Destruye un objeto de la clase TExceptionLog.
 ******************************************************************************}
begin
  Application.OnException := SavedHandler;
  inherited Destroy;
end; {* Fin D. TExceptionLog-Destroy *}

Initialization
  // Nada

Finalization
  // Al finalizar... detener el registro del log
  StopLog;

end.

Como podrás observar, es demasiado simple... estuve viendo que más le puedo sacar al Exception y del Sender... y por el momento no se me ocurre nada...

Realmente me gustaría poder capturar muchas de las cosas que ofrece el componente de la JEDI... pero lo que he leído del hilo que me mandaste, esa info (en parte) va junto al exe,... y no se... me gustaría evitarme eso.

Estaba pensando en descargar la JEDI Library... como para chequear un poco, pero me gustaría saber si hay alguna manera de sacar alguna (por lo menos) de la info que ofrece ese componente... mediante algún código más o menos sencillo sin tener que andar descargandolo. ¿Me explico? A ver, ¿Es posible obtener información parecida a lo que ofrece el componente, sin tener que hacer uso del mismo, por código? No quisiera decargar toda una librería si lo que quiero se puede hacer sin componente... no quiere decir que esté en contra de la librería (estoy seguro de que le sacaría provecho), ¿pero mientras me pueda valer de los componentes estándar (y/o propios)... para que más?

Desde ya muchas gracias.
__________________
Delphius
[Guia de estilo][Buscar]
Responder Con Cita