Componente gb.logging


Ir a la página 1, 2  Siguiente

Objetivo: Componente gb.logging
Hola

Aunque hace poco tiempo que su autor, nuestro compañero Sebikul, creó este componente, algunos desconocíais su existencia y el modo de usarlo en nuestras aplicaciones.

La documentación y los ejemplos son escuetos, así que voy a explicar brevemente su uso y sus grandes posibilidades de uso en cualquier aplicación seria para generar un log con mensajes de diferentes tipos, siguiendo el estándar RFC5454.

En primer lugar hay que activar el componente desde las propiedades del proyecto para poder usarlo.

Lo segundo que haremos será crear una instancia de la clase Logger. Si tenemos previsto usar mensajes de log en toda la aplicación, lo mejor es crear una instancia pública para tener acceso desde cualquier parte de la aplicación, Podemos crear cuantas queramos, ya sea desde un módulo o un formulario, pero por supuesto hay que inicializarla antes de poder usarla. Esto lo haremos por ejemplo en el evento _new() o en el form open de nuestro formulario principal:

Public mylogger As Logger

Public Sub Form_Open()
' nivel mínimo de logueo y salida a fichero opcional
mylogger = New Logger(Logger.Warning, User.Home &/ "Logger.txt")

End


Hemos creado una variable pública de tipo Logger. En el evento form_open, instanciamos una nueva clase pasando dos parámetros: el primero es el nivel de logueo que queremos registrar y el segundo parámetro es opcional. Si no se lo pasamos, los mensajes de log aparecerán en consola, pero si especificamos una ruta a un fichero, se guardarán los mensajes de log automáticamente en dicho fichero. El fichero una vez creado la primera vez, es persistente, es decir, no se borra su contenido. Si queremos inicializar el fichero al comienzo de la aplicación, tendremos que hacerlo nosotros mismos.

En cualquier parte de nuestra aplicación podemos usar ahora la sentencia:

mylogger("Mensaje de error o aviso", Nivel-de-error)


Hay cinco niveles de logueo que son Critical, Error, Warning, Info y Debug en orden descendiente por importancia. El nivel que declaremos en el primer parámetro de la clase Logger será el que sirva de corte hacia abajo. Es decir, si seleccionamos Logger.Warning, todas las ocurrencias que tengamos declaradas en el programa como Debug o Info, no serán logueadas, pero si lo serán Warning, Error y Critical. De esta forma, podemos crear los mecanismos adecuados para que el usuario pueda escoger un nivel de logueo específico, ya sea para depuración de errores o para trazar los pasos del programa.

Con un ejemplo práctico, lo veremos más claramente:

Public mylogger As Logger

Public Sub Form_Open()
' nivel mínimo de logueo y salida a fichero

mylogger = New Logger(Logger.Warning)

End

Public Sub Button1_Click()

Dim nr As Integer

mylogger("test warning", Logger.Warning)

' no se loguea porque info está por debajo de warning
mylogger("test info", Logger.Info)

nr = 10 / 0

Catch
mylogger(Error.Text, Logger.Error)

End


El código es autoexplicativo, sólo añadir que el formato por defecto es algo así:

[11/27/2013 23:32:22.191] [WARNING] [FMain.Button1_Click.16] test warning
[11/27/2013 23:32:22.191] [ERROR] [FMain.Button1_Click.24] Division by zero


Pero si deseamos cambiarlo, el componente también lo permite. Sólo hay que especificarlo usando el método Format de la clase Logger mediante una cadena de tokens que representan el mensaje, la hora, el método desde donde se invoca y muchos más, convenientemente explicados en la ayuda del componente:

http://www.gambaswiki.org/wiki/comp/gb.logging

Espero que sea de utilidad, para mí es de una gran ayuda y desde aquí quiero agradecer a Sebikul su trabajo.

Saludos

última edición por jguardon el Miercoles, 27 Julio 2016, 19:52; editado 1 vez
Perfil MP  
Objetivo: Re: Componente Gb.logging
jguardon:

Muy útil ese componente, sobre todo para cuando otras personas que usen un programa, les sea más facil pasarte información del error que se ha producido y en que parte del código.

Citar:
mylogger("test warning", Logger.Warning)

Ademas, le puedes añadir una cadena de texto para más información ( por ejemplo, informar de valores de variables en los que estaba trabajando cuando se produjo el error).

Gracias Sebikul por hacerlo y jguardon por explicarlo

Saludos

Objetivo: Re: Componente Gb.logging
No lo conocía. Mola.
Yo uso algo parecido hecho por mí, pero que guarda los registros en una tabla de la base de datos.
Estudiaré el de Sebas cuando tenga un ratito. Eso de los niveles, como que mola.

Perfil MP  
Objetivo: Re: Componente Gb.logging
Es muy agradable saber que mi trabajo es de utilidad para otros!!
En un principio quería hacer que el componente cree una clase estática, al igual que Settings. De esta forma sólo haría falta ejecutar Logger(...) Pero por alguna razón está modalidad estaba tirando un error.

Shordi: dime como esta implementado tu sistema de logueo. Quizás pueda agregar una modalidad que redireccione la salida a una base de datos y guarde una lista de campos en columnas configurables, quizás hasta con un formato distinto en cada una. La idea es muy buena!

Perfil MP  
Objetivo: Re: Componente Gb.logging
Sebas,

Te adjunto una pequeña versión simplificada de lo que uso (la original hace algunas cosas no traspasables a algo de propósito general).

Para el ejemplo uso una base sqlite que se crea en la carpeta home. (La original usa mysql, pero el código es el mismo, salvo en la creación de la base y la tabla)

Tiene dos propiedades a grabar en la tabla:

-tipo, que es una cadena que indica qué tipo de operación se logea ("Añade registro en tabla fulana", "Entra al sistema", etc. etc. y
-datos, que es un Variant que admite cadenas, números, fechas y Results.
Si se le pasa un result, lo convierte en una cadena que contiene: nombre de campo+: +valor del campo+ salto de línea.

Además se graban en la tabla el nick del usuario (para el ejemplo lo he deshabilitado) y la fecha y hora del momento.

No sé si te sirve de algo, pero es lo que uso y, de momento, me vale, bien administrado por la aplicación te permite luego buscar cualquier evento que haya ocurrido filtrando por usuario, tipo de operación, contenido de la operación, etc..

Saludos.


Logger.tar.gz
Descripción:  
Descargar
Nombre del archivo: Logger.tar.gz
Tamaño: 5.96 KB
Descargado: 40 veces
Logger.tar.gz
Descripción:  
Descargar
Nombre del archivo: Logger.tar.gz
Tamaño: 5.96 KB
Descargado: 40 veces
Logger.tar.gz
Descripción:  
Descargar
Nombre del archivo: Logger.tar.gz
Tamaño: 5.96 KB
Descargado: 40 veces

Perfil MP  
Objetivo: Re: Componente Gb.logging
buenas gente, estoy intentando usar por primera vez el componente logger y me he topado con un error a ver si alguien sabe el porque?

errorlogger

el error me lo da al cerrar el programa.

alguna idea de porque pasa?

Objetivo: Re: Componente Gb.logging
Yo estoy utilizando el componente gb.logging, ahora actualizo a gambas 3.7 y me encuentro con que me da error gb.logging ya que ahora la propiedad Output es solo de lectura, yo antes guardaba los logs en un archivo.
Ya que Sebikul anda de vez en cuando por aqui, como guardo ahora los logs si la propiedad output es de lectura no escritura

Perfil MP  
Objetivo: Re: Componente Gb.logging
angelnu escribió:  
Yo estoy utilizando el componente gb.logging, ahora actualizo a gambas 3.7 y me encuentro con que me da error gb.logging ya que ahora la propiedad Output es solo de lectura, yo antes guardaba los logs en un archivo.
Ya que Sebikul anda de vez en cuando por aqui, como guardo ahora los logs si la propiedad output es de lectura no escritura


El problema esta en que ahora reescribi el sistema del logger. La clase Logger solo quedo para ser retrocompatible, pero se ver que se me escapo eso. Lo hice porque ahora si usas un ComplexLogger, puedes escupir mensajes a varios archivos, cada uno con una severidad distinta, y a la consola tambien (todo al mismo tiempo y de forma automatica, con un solo objeto ComplexLogger!)

La clase Logger, por este motivo lo tuve que reescribir. Las opciones que tienes para solucionar tu problema es mudarte a la clase ComplexLogger que provee esta funcionalidad que mencione, or pasar la ruta del archivo como parametro del constructor:

Public Sub _new(Optional iMinLevel As Integer = LogLevel.Info, Optional sFormat As String = DefaultFormat, Optional sOutput As String)


Es cierto que me falta documentar los cambios. Lo hare por estos dias.
Cualquier duda aqui estoy para responder!

Perfil MP  
Objetivo: Re: Componente Gb.logging
v3ctor escribió:  
buenas gente, estoy intentando usar por primera vez el componente logger y me he topado con un error a ver si alguien sabe el porque?

errorlogger

el error me lo da al cerrar el programa.

alguna idea de porque pasa?


Puedes mandar un proyecto que reproduzca el error asi puedo ver exactamente de donde viene?

Perfil MP  
Objetivo: Re: Componente Gb.logging
aquí esta lo que había empezado.

el error se da cuando cierras la aplicación

sebikul intenta mandar un mensaje al log y también da otro error.


[System]
gambas=3.7.0
OperatingSystem=Linux
Kernel=3.13.0-37-generic
Architecture=x86
Distribution=Linux Mint 17.1 Rebecca
Desktop=MATE
Theme=QGtk
Language=es_UY.UTF-8
Memory=2776M
[Libraries]
Cairo=libcairo.so.2.11301.0
Curl=libcurl.so.4.3.0
DBus=libdbus-1.so.3.7.6
GStreamer=libgstreamer-0.10.so.0.30.0
GStreamer=libgstreamer-1.0.so.0.204.0
GTK+3=libgtk-3.so.0.1000.8
GTK+=libgtk-x11-2.0.so.0.2400.23
OpenGL=libGL.so.1.2.0
Poppler=libpoppler.so.44.0.0
Qt4=libQtCore.so.4.8.6
SDL=libSDL-1.2.so.0.11.4


MiLogger-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: MiLogger-0.0.1.tar.gz
Tamaño: 3.91 KB
Descargado: 33 veces
MiLogger-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: MiLogger-0.0.1.tar.gz
Tamaño: 3.91 KB
Descargado: 33 veces
MiLogger-0.0.1.tar.gz
Descripción:  
Descargar
Nombre del archivo: MiLogger-0.0.1.tar.gz
Tamaño: 3.91 KB
Descargado: 33 veces

Ir a la página 1, 2  Siguiente

Página 1 de 2


  
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas
No puede adjuntar archivos
Puede descargar archivos
No puede publicar eventos en el calendario

   

Está utilizando la versión (Lo-Fi). Para ver la versión completa del foro, haga clic aquí.

Powered by Icy Phoenix based on phpBB
Design by DiDiDaDo

Página generada en:: 0.4206s (PHP: -76% SQL: 176%)
Consultas SQL: 49 - Debug off - GZIP Activado