jachLog v 2.0

jachLog es una biblioteca de código abierto que nos ayuda a integrar de manera super rápida una maquinaria flexible, estable y poderosa para la generación de entradas de Log a nuestras aplicaciones Delphi. Está disponible en github.com/jachguate/jachLogMgr.

Yo soy el autor de la biblioteca, que liberé bajo licencia MIT, sin mayores anuncios a mediados del año pasado. No hice muchos anuncios, porque la biblioteca, si bien es estable, probada y lista para poner en producción, estaba careciendo de una serie de características que he tenido en mente desde hace tiempo y no quería hacer tantos anuncios hasta que estuviera bien organizado, con un plan y algunas de dichas características ya integradas.

Recientemente he liberado la versión 2.0 de la biblioteca y creo que, si no la conocías, es tiempo que le eches un vistazo y veas si puede ser de utilidad en tus proyectos.

Sus principales características son:

  • El log completo puede encenderse y apagarse.
  • Múltiples tópicos de log pueden encenderse y apagarse individualmente.
  • Múltiples niveles de severidad permiten filtrar mensajes por tópico y nivel de severidad.
  • Múltiples destinos de log
    • Disco, con rotación automática por límite de tamaño de archivo
    • Consola
    • Visual a un componente de texto enriquecido (VCL y FMX) (A partir de la versión 2.1)
    • SysLog local o remoto
      • Basado en Indy (A partir de la versión 2.2)
      • Basado en ICS (Solo si es requerido por la comunidad)
      • Basado en otra biblioteca TCP/UDP (Solo si es requerido por la comunidad)
    • Windows Event Log (A partir de la versión 2.5)
    • Log standard de android (A partir de la versión 2.6)
    • Log standard de Linux (A partir de la versión 3+)
    • Clase base para registrar a base de datos (A partir de la versión 3+)
  • Soporte para aplicaciones multi-hilo
  • Gran desempeño
    • La escritura del log a sus destinos puede realizarse en hilos secundarios
    • Puede mantenerse mensajes en caché durante una transacción para realizar la escritura a los destinos como una única operación al final de la transacción, lo que reduce significativamente el tiempo de dicha operación.
  • Manejo de diferentes niveles de verbosidad para los mensajes de nivel Debug, lo que permite filtrar dichos mensajes también por verbosidad para un mayor control de la cantidad de log generado por aplicaciones en producción.

De hecho, entre la versión 1 y la versión 2.0 ha habido una buena re-ingeniería, lo que ha provocado una serie de cambios que rompen con la compatibilidad, que me ha sido imposible evitar y que te generarán algún trabajo si ya la usabas. Desde ya te ofrezco una disculpa. Yo he hecho el esfuerzo ya en varios proyectos bajo mi cargo y, creeme, el esfuerzo valdrá la pena.

El proceso no está bien documentado por ahora, pero no dudes en contactarme si necesitas algo de ayuda.

Una de las buenas noticias es que, con la versión 2, ha venido un buen poco de documentación (en inglés) y algunas demos, por lo que espero resulte más sencilla la integración y sacar el máximo provecho de la biblioteca.

Dejo un pequeño ejemplo de lo simple que puede resultar agregar la generación de logs a tu aplicación.

uses
  ujachLogAuto, ujachLogClasses;

{$R *.dfm}

procedure TmyForm.ProcessData(InputFileName: string);
var 
  I: Integer;
begin
  jachLog.LogInfo('Data processing start, FileName: %s', [InputFileName]);
  try
    jachLog.LogInfo('Opening file...');
    OpenDataFile(InputFileName);
    jachLog.LogInfo('Processing %d records on file...', [FDataFile.RecordCount]);
    for I := 0 to FDataFile.RecordCount - 1 do
      ProcessDataRecord(I);
    jachLog.LogInfo('Closing file...');
    CloseDataFile();
    jachLog.LogInfo('Sending notifications...');
    SendNotifications;
    jachLog.LogInfo('Data processing finished succesfully');
  except
    on E:Exception do
    begin
      jachLog.LogError('Data processing finished with Error', E);
      raise;
    end;
  end;
end;;

Me despido, agradezco sus comentarios y retroalimentación sobre la biblioteca y esta entrada.

Autor: jachguate

Entrepreneur, traveler and IT enthusiast passionate about Delphi, databases and networks.

6 opiniones en “jachLog v 2.0”

    1. The library supports multithreaded applications. You can call the Log methods from any thread. In that case, you have to make sure the logging object and writers are created as earliest as possible in the main thread and destroyed at the latest stage in the same main thread. For example, you can use the uajchLogAuto unit, which does just that.

Deja un comentario