|
Página 1 de 2
|
Autor |
Mensaje |
jguardon
Administrador
Registrado: Septiembre 2009
Mensajes: 2708
Edad: 57 Ubicación: Granada
|
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
=================== Jesús Guardón
Por favor, usemos el corrector ortográfico antes de pulsar el botón "Enviar".
"uo ǝs ʇɐu pıɟıɔıן ɐdɹǝupǝɹ ɐ dɹoƃɹɐɯɐɹ, soןo ɥɐʎ bnǝ dɹodouǝɹsǝןo"
última edición por jguardon el Miercoles, 27 Julio 2016, 19:52; editado 1 vez
Editado por jguardon, Miercoles, 27 Julio 2016, 19:52: Corregido enlace a documentación del componente a gambaswiki
|
#1 Jueves, 28 Noviembre 2013, 00:08 |
|
|
jsbsan
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4175
Edad: 51 Ubicación: dos hermanas, sevilla
|
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
|
#2 Jueves, 28 Noviembre 2013, 09:38 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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.
|
#3 Jueves, 28 Noviembre 2013, 10:19 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
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!
|
#4 Viernes, 29 Noviembre 2013, 16:51 |
|
|
shordi
Analista Programador
Registrado: Septiembre 2009
Mensajes: 4982
Edad: 64 Ubicación: Albacete
|
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.
Descripción: |
|
Descargar |
Nombre del archivo: |
Logger.tar.gz |
Tamaño: |
5.96 KB |
Descargado: |
38 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
Logger.tar.gz |
Tamaño: |
5.96 KB |
Descargado: |
38 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
Logger.tar.gz |
Tamaño: |
5.96 KB |
Descargado: |
38 veces |
|
#5 Viernes, 29 Noviembre 2013, 21:24 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
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?
el error me lo da al cerrar el programa.
alguna idea de porque pasa?
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#6 Viernes, 20 Marzo 2015, 16:57 |
|
|
angelnu
Angel
Programador
Registrado: Septiembre 2009
Mensajes: 106
Edad: 61 Ubicación:
|
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
|
#7 Viernes, 20 Marzo 2015, 17:51 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
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:
Es cierto que me falta documentar los cambios. Lo hare por estos dias.
Cualquier duda aqui estoy para responder!
|
#8 Viernes, 20 Marzo 2015, 20:35 |
|
|
sebikul
Sebastian
Programador
Registrado: Julio 2012
Mensajes: 113
Edad: 30 Ubicación:
|
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?
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?
|
#9 Viernes, 20 Marzo 2015, 20:44 |
|
|
v3ctor
Analista Programador
Registrado: May 2013
Mensajes: 1786
Edad: 44 Ubicación: Uruguay
|
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
Descripción: |
|
Descargar |
Nombre del archivo: |
MiLogger-0.0.1.tar.gz |
Tamaño: |
3.91 KB |
Descargado: |
31 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
MiLogger-0.0.1.tar.gz |
Tamaño: |
3.91 KB |
Descargado: |
31 veces |
Descripción: |
|
Descargar |
Nombre del archivo: |
MiLogger-0.0.1.tar.gz |
Tamaño: |
3.91 KB |
Descargado: |
31 veces |
=================== Software libre, programación libre, vida libre es la Public function Libertad()as Invendible
Proyectos: VisorRV1960,Taller2015,Tanteador
https://sourceforge.net/u/v3ctor-full/profile/
Blog: http://novatocodegambas.blogspot.com.uy/
|
#10 Viernes, 20 Marzo 2015, 22:08 |
|
|
|
Temas parecidos
Temas parecidos
|
Página 1 de 2
|
Usuarios navegando en este tema: 0 registrados, 0 ocultos y 1 invitado Usuarios registrados conectados: Ninguno
|
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
|
|
|
|
|