Este es un aporte para todos los compañeros gamberanos, gambinos, gamberos, etc.....
He creado una clase pequeña que permite generar la traza de una aplicación ya sea por consola o en un archivo de log.
La idea es bastante simple pero a la vez útil. Pensando en log4Java o Log4Net. (no es tan pro, pero se hace lo que se puede).
Espero les sea de utilidad
[2017-10-19] Actualización del código, cambie las variables string por un arreglo que contiene las glosas.
Así se debe instanciar
Private oLog As Log4Gambas
Public Sub Main()
Dim oPrincipal As Principal
Dim sTexto As String = ("Se detecto un problema que detendra la Aplicación")
oLog = New Log4Gambas("mInicio")
oLog.Info("Revision primera de existencia de directorio y archivos de trabajo")
RevisionDirectorioTrabajo()
oPrincipal = New Principal
oPrincipal.Show()
Catch
oLog.Error(sTexto)
Message.Error(sTexto)
End
Public Sub Main()
Dim oPrincipal As Principal
Dim sTexto As String = ("Se detecto un problema que detendra la Aplicación")
oLog = New Log4Gambas("mInicio")
oLog.Info("Revision primera de existencia de directorio y archivos de trabajo")
RevisionDirectorioTrabajo()
oPrincipal = New Principal
oPrincipal.Show()
Catch
oLog.Error(sTexto)
Message.Error(sTexto)
End
Codigo Fuente
' gambas class file
'
'======================================================================================================
' Clase Log4Gambas
' Creador : Marcos Sepulveda
' web : EntornoLinux.blogspot.cl
' Correo : sepulvedamarcos@gmail.com
' Telegram : @sepulvedamarcos
'
' Esta clase tiene por objetivo permitir la generacion de trazas para el
' seguimiento de los sucesos de un aplicativo.
'
' Los niveles de mensajes en orden de jerarquia son:
' Ninguno = 0 No dejara trazas de log
' Debug = 1 Dejara trazas desde el nivel Debug para adelante (Debug, Info, Alerta, Error, Fatal)
' Informativo = 2 Dejara trazas desde el nivel Informativo para adelante (Info, Alerta, Error, Fatal)
' Alerta = 3 Dejara trazas desde el nivel Alerta para adelante (Alerta, Error, Fatal)
' Error = 4 Dejara trazas desde el nivel Error para adelante (Error, Fatal)
' Fatal = 5 Dejara trazas del nivel Fatal
'
' Los Tipos de salida son
' Ninguno = 0 Define que no se ganerara log
' Archivo = 1 Define que se generara el log en un archivo ubicado en la ruta del Setting de la aplicacion
' Consola = 2 Define que los mensajes seran enviados a la consola. Se debe ejecutar la aplicacion desde consola para verlos
'
'
' * Esta libreria necesita de parametros en el archivo Settings de la aplicación
' donde es ejecutada
'
' Global/NivelLog = La key debe ser un valor constante de niveles de error -> Por defecto Ninguno
' Global/SalidaLog = La key debe ser un valor constante de salidas del log -> Por defecto Ninguno
' Global/TamanoLog = La Key debe tener un valor numerico expresado en Megas -> Por defecto 1 = 1 Mega
'======================================================================================================
'
Private $sNombreInstacia As String '' Nombre de la instancia que llama
Private $iNivel As Integer '' Nivel de salida
Private $iSalida As Integer '' Tipo de Salida
Private $sRuta As String '' Ruta del Archivo
Private $sNombre As String '' Nombre del archivo
Private $iTamano As Integer '' Tamaño del archivo en megas
'Glosas para enviar
Public $aNivel As String[] = ["Ninguno", "Debug", "Informativo", "Alerta", "Error", "Fatal"]
'Niveles de error
Public Enum NivelNinguno = 0, NivelDebug, NivelInformativo, NivelAlerta, NivelError, NivelFatal
'Salida del log
Public Enum SalidaNinguno = 0, SalidaArchivo, SalidaConsola
Private $sMensaje As String = ("Problemas al crear el archivo de Log4Gambas")
Public Sub _new(sNombre As String) ''Metodo constructor, necesita el nombre de la instancia que genera el log (comunmente el nombre del formulario, Modulo o Clase)
$sNombreInstacia = sNombre
'Chequeo de Existencia de archivo Settings
'RevisarSettings()
$iNivel = CInt(Settings["Global/NivelLog", NivelNinguno])
$iSalida = CInt(Settings["Global/SalidaLog", SalidaNinguno])
$iTamano = CInt(Settings["Global/TamanoLog", "1"])
$sRuta = File.Dir(Settings.Path) &/ Application.Name
$sNombre = Application.Name & ".log"
End
Public Sub Debug(sTexto As String) '' Metodo para enviar mensajes de nivel Debug. \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelDebug, sTexto)
End
Public Sub Info(sTexto As String) '' Metodo para enviar mensajes de nivel Info. \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelInformativo, sTexto)
End
Public Sub Alerta(sTexto As String) '' Metodo para enviar mensajes de nivel Alerta . \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelAlerta, sTexto)
End
Public Sub Error(sTexto As String) '' Metodo para enviar mensajes de nivel Error . \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelError, sTexto)
End
Public Sub Fatal(sTexto As String) '' Metodo para enviar mensajes de nivel Fatal . \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelFatal, sTexto)
End
Private Sub ImprimeMensaje(iTipo As Integer, sTexto As String) ''Metodo privado que verfica donde enviar el log y lo ejecuta
Dim oArchivo As File
Dim sLinea As String
$iNivel = CInt(Settings["Global/NivelLog", NivelNinguno])
$iSalida = CInt(Settings["Global/SalidaLog", SalidaNinguno])
$iTamano = CInt(Settings["Global/TamanoLog", "1"])
$sRuta = File.Dir(Settings.Path) &/ Application.Name
$sNombre = Application.Name & ".log"
sLinea = "[" & Format(Now(), "dd-mm-yyyy hh:nn:ss") & "]" 'Agregamos la Fecha
sLinea &= "[" & $sNombreInstacia & "]" 'Agregamos la Instancia que genera
sLinea &= "[" & $aNivel[iTipo] & "]"
sLinea &= "[" & sTexto & "]"
If $iNivel <= iTipo Then
Select Case $iSalida
Case SalidaConsola
' Envio de mensajes a la consola
Print sLinea
Case SalidaArchivo
' Revision del Tamaño del archivo log
RevisionTamano()
'Revision de Existencia de ruta
RevisionRuta()
' envio de mensajes a un archivo log
oArchivo = Open $sRuta &/ $sNombre For Write Append
Write #oArchivo, sLinea & gb.CrLf
Case SalidaNinguno
'Nada que hacer.
End Select
Endif
Catch
Error.Raise($sMensaje & "[" & Error.Text & "]")
End
Private Sub RevisionTamano()
'Verifico el peso del archivo log y es necesario se borra
If Exist($sRuta &/ $sNombre) Then
If Stat($sRuta &/ $sNombre).Size >= (CInt($iTamano) * 1000000) Then
Kill $sRuta &/ $sNombre
Endif
Endif
Catch
Error.Raise($sMensaje & "[" & Error.Text & "]")
End
Private Sub RevisionRuta()
If Not IsDir($sRuta) Then
Mkdir $sRuta
Endif
Catch
Error.Raise($sMensaje & "[" & Error.Text & "]")
End
'
'======================================================================================================
' Clase Log4Gambas
' Creador : Marcos Sepulveda
' web : EntornoLinux.blogspot.cl
' Correo : sepulvedamarcos@gmail.com
' Telegram : @sepulvedamarcos
'
' Esta clase tiene por objetivo permitir la generacion de trazas para el
' seguimiento de los sucesos de un aplicativo.
'
' Los niveles de mensajes en orden de jerarquia son:
' Ninguno = 0 No dejara trazas de log
' Debug = 1 Dejara trazas desde el nivel Debug para adelante (Debug, Info, Alerta, Error, Fatal)
' Informativo = 2 Dejara trazas desde el nivel Informativo para adelante (Info, Alerta, Error, Fatal)
' Alerta = 3 Dejara trazas desde el nivel Alerta para adelante (Alerta, Error, Fatal)
' Error = 4 Dejara trazas desde el nivel Error para adelante (Error, Fatal)
' Fatal = 5 Dejara trazas del nivel Fatal
'
' Los Tipos de salida son
' Ninguno = 0 Define que no se ganerara log
' Archivo = 1 Define que se generara el log en un archivo ubicado en la ruta del Setting de la aplicacion
' Consola = 2 Define que los mensajes seran enviados a la consola. Se debe ejecutar la aplicacion desde consola para verlos
'
'
' * Esta libreria necesita de parametros en el archivo Settings de la aplicación
' donde es ejecutada
'
' Global/NivelLog = La key debe ser un valor constante de niveles de error -> Por defecto Ninguno
' Global/SalidaLog = La key debe ser un valor constante de salidas del log -> Por defecto Ninguno
' Global/TamanoLog = La Key debe tener un valor numerico expresado en Megas -> Por defecto 1 = 1 Mega
'======================================================================================================
'
Private $sNombreInstacia As String '' Nombre de la instancia que llama
Private $iNivel As Integer '' Nivel de salida
Private $iSalida As Integer '' Tipo de Salida
Private $sRuta As String '' Ruta del Archivo
Private $sNombre As String '' Nombre del archivo
Private $iTamano As Integer '' Tamaño del archivo en megas
'Glosas para enviar
Public $aNivel As String[] = ["Ninguno", "Debug", "Informativo", "Alerta", "Error", "Fatal"]
'Niveles de error
Public Enum NivelNinguno = 0, NivelDebug, NivelInformativo, NivelAlerta, NivelError, NivelFatal
'Salida del log
Public Enum SalidaNinguno = 0, SalidaArchivo, SalidaConsola
Private $sMensaje As String = ("Problemas al crear el archivo de Log4Gambas")
Public Sub _new(sNombre As String) ''Metodo constructor, necesita el nombre de la instancia que genera el log (comunmente el nombre del formulario, Modulo o Clase)
$sNombreInstacia = sNombre
'Chequeo de Existencia de archivo Settings
'RevisarSettings()
$iNivel = CInt(Settings["Global/NivelLog", NivelNinguno])
$iSalida = CInt(Settings["Global/SalidaLog", SalidaNinguno])
$iTamano = CInt(Settings["Global/TamanoLog", "1"])
$sRuta = File.Dir(Settings.Path) &/ Application.Name
$sNombre = Application.Name & ".log"
End
Public Sub Debug(sTexto As String) '' Metodo para enviar mensajes de nivel Debug. \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelDebug, sTexto)
End
Public Sub Info(sTexto As String) '' Metodo para enviar mensajes de nivel Info. \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelInformativo, sTexto)
End
Public Sub Alerta(sTexto As String) '' Metodo para enviar mensajes de nivel Alerta . \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelAlerta, sTexto)
End
Public Sub Error(sTexto As String) '' Metodo para enviar mensajes de nivel Error . \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelError, sTexto)
End
Public Sub Fatal(sTexto As String) '' Metodo para enviar mensajes de nivel Fatal . \n Se le debe enviar el Texto del Mensaje como parametro
ImprimeMensaje(NivelFatal, sTexto)
End
Private Sub ImprimeMensaje(iTipo As Integer, sTexto As String) ''Metodo privado que verfica donde enviar el log y lo ejecuta
Dim oArchivo As File
Dim sLinea As String
$iNivel = CInt(Settings["Global/NivelLog", NivelNinguno])
$iSalida = CInt(Settings["Global/SalidaLog", SalidaNinguno])
$iTamano = CInt(Settings["Global/TamanoLog", "1"])
$sRuta = File.Dir(Settings.Path) &/ Application.Name
$sNombre = Application.Name & ".log"
sLinea = "[" & Format(Now(), "dd-mm-yyyy hh:nn:ss") & "]" 'Agregamos la Fecha
sLinea &= "[" & $sNombreInstacia & "]" 'Agregamos la Instancia que genera
sLinea &= "[" & $aNivel[iTipo] & "]"
sLinea &= "[" & sTexto & "]"
If $iNivel <= iTipo Then
Select Case $iSalida
Case SalidaConsola
' Envio de mensajes a la consola
Print sLinea
Case SalidaArchivo
' Revision del Tamaño del archivo log
RevisionTamano()
'Revision de Existencia de ruta
RevisionRuta()
' envio de mensajes a un archivo log
oArchivo = Open $sRuta &/ $sNombre For Write Append
Write #oArchivo, sLinea & gb.CrLf
Case SalidaNinguno
'Nada que hacer.
End Select
Endif
Catch
Error.Raise($sMensaje & "[" & Error.Text & "]")
End
Private Sub RevisionTamano()
'Verifico el peso del archivo log y es necesario se borra
If Exist($sRuta &/ $sNombre) Then
If Stat($sRuta &/ $sNombre).Size >= (CInt($iTamano) * 1000000) Then
Kill $sRuta &/ $sNombre
Endif
Endif
Catch
Error.Raise($sMensaje & "[" & Error.Text & "]")
End
Private Sub RevisionRuta()
If Not IsDir($sRuta) Then
Mkdir $sRuta
Endif
Catch
Error.Raise($sMensaje & "[" & Error.Text & "]")
End