Spanish [SOLUCIONADO] Como hacer un fichero de traza

cas6678

Active Member
Licensed User
Jesus,

Siguiendo tu sugerencia abro el post para que indiques como hacer este fichero de traza y poder encontrar los errores.

Gracias de antemano.
 

bgsoft

Well-Known Member
Licensed User
Hola

Si, como te comenté en el otro post no tiene nada, a veces las cosas simples son las que mejores funcionan. Yo tengo este sub en un modulo de codigo y es publico, y cuando quiero hacer un seguimiento a algo que como en tu caso te genera un error aleatorio lo empleo. De esa forma no tengo que estar pendiente todo el tiempo por que a veces serian horas para esperar que suceda el error.

Si haces muchas llamadas a la traza desde diferentes sitios y no quieres ir uno por uno comentandola, es tan facil como poner un return en el sub y asi deja de grabar.

B4X:
Public Sub GrabarTraza (Texto As String)

Dim DirFile As String
Dim T_F As String

' Return ' si lo descomentas te vale para dejar de grabar sin tener que comentar las llamadas

DirFile = File.DirDefaultExternal ' o la carpeta que quieras

T_F= ""
If File.Exists(DirFile, "Traza.txt") Then
  T_F=File.GetText(DirFile, "Traza.txt")    
End If

Dim FechaIn As Long
FechaIn = DateTime.Now
tmp=  NumberFormat(DateTime.GetDayOfMonth(FechaIn),2,0) & "-" & NumberFormat(DateTime.GetMonth(FechaIn),2,0) & "-" & DateTime.GetYear(FechaIn)
tmp = tmp & " - " &  NumberFormat(DateTime.GetHour(FechaIn),2,0) & ":" & NumberFormat(DateTime.GetMinute(FechaIn),2,0) & ":" & NumberFormat(DateTime.GetSecond(FechaIn),2,0)   

T_F = tmp & CRLF & Texto & CRLF & T_F 

File.WriteString (DirFile,"Traza.txt", T_F)


End Sub
Espero que con esto consigas saber donde esta el error de tu otro post

saludos
 
Last edited:

cas6678

Active Member
Licensed User
Hola otra vez.

El tema que dio origen al fichero de traza ya estaba resuelto pero me quede con este sistema porque realmente es muy util para poder hacer una "auditoria" de lo que va pasando cuando no podemos ver ;)

A raiz de esto me surge una duda. Lo que hace este fichero de traza es leer el txt y volver a grabarlo entero sumandole un nuevo dato. Si las llamadas a este fichero son muchas, por ejemplo 4 por segundo, cuando se puede convertir por tamaño en un problema que demore al propio programa?

Saludos.
 

bgsoft

Well-Known Member
Licensed User
Hola

Como esto es para pruebas, no para dejar fijo en la aplicación, por lo tanto estas probando en un dispositivo concreto, asi que tu mejor que nadie veras cuando el fichero pesa mucho, por que va a depender te que amplitud de texto grabes cada vez.
Una forma muy facil es comprobar el tamaño (File.Size) y cuando tu lo creas conveniente creas uno nuevo renombrando el anterior.

El código original quedaria como te lo escribo mas abajo, he añadido un nuevo sub donde cojo la fecha y hora para asi cuando mires el directorio veras de un golpe rápido de vista cuales son. Puedes cambiar el formato de fecha como mas te guste o cambiarlo por un contador, creas una variable global, incrementas el contador y luego grabas. El problema es que cada vez que inicies la aplicacion el contador estará a 0, a menos que lo guardes en un fichero, de esta forma siempre sabras a que dia pertenece la traza sin abrir el fichero y no habrá repetición de fichero.

B4X:
Public Sub GrabarTraza (Texto As String)

Dim DirFile As String
Dim T_F As String

' Return ' si lo descomentas te vale para dejar de grabar sin tener que comentar las llamadas

DirFile = File.DirDefaultExternal ' o la carpeta que quieras

T_F= ""
If File.Exists(DirFile, "Traza.txt") Then
  if File.Size(DirFile, "Traza.txt") > LoQuetuQuierasEnBytes then ' pon el valor que tu creas para crear un nuevo fichero, acuerdarte que lo devuelve en bytes
    File.Copy(DirFile, "Traza.txt", DirFile, CogerFechaHora & "_Traza.txt") ' se copia el antiguo con fecha actual yyyymmddhhmmss
    File.Delete(DirFile, "Traza.txt") ' se borra el antiguo 
  else
    T_F=File.GetText(DirFile, "Traza.txt")
  end if
  
End If

Dim FechaIn As Long
FechaIn = DateTime.Now
tmp=  NumberFormat(DateTime.GetDayOfMonth(FechaIn),2,0) & "-" & NumberFormat(DateTime.GetMonth(FechaIn),2,0) & "-" & DateTime.GetYear(FechaIn)
tmp = tmp & " - " &  NumberFormat(DateTime.GetHour(FechaIn),2,0) & ":" & NumberFormat(DateTime.GetMinute(FechaIn),2,0) & ":" & NumberFormat(DateTime.GetSecond(FechaIn),2,0) 

T_F = tmp & CRLF & Texto & CRLF & T_F

File.WriteString (DirFile,"Traza.txt", T_F)


End Sub



Public Sub CogerFechaHora() As String
' en formato yyyymmddhhmmss
Dim Fecha, Hora, FH As String
Dim FechaIn As Long

FechaIn = DateTime.Now

Fecha =DateTime.GetYear(FechaIn) & NumberFormat(DateTime.GetMonth(FechaIn),2,0) & NumberFormat(DateTime.GetDayOfMonth(FechaIn),2,0)
Hora = NumberFormat(DateTime.GetHour(FechaIn),2,0) & NumberFormat(DateTime.GetMinute(FechaIn),2,0) & NumberFormat(DateTime.GetSecond(FechaIn),2,0)

FH= Fecha & Hora

Return FH
End Sub

Saludos
 
Top