Página 1 de 1

Outra forma de errorsys.

Enviado: 22 Jul 2018 10:43
por JoséQuintas
Por causa da tranqueira do Flagship, acabei descobrindo uma nova forma de usar minha errorsys.

Código: Selecionar todos

   PUBLIC OldHandler
   OldHandler := ErrorBlock()
   ErrorBlock( { | e | JoseQuintasError( e ), Eval( OldHandler, e ) } )
E acabei descobrindo "erros ocultos".
Error on 19/07/2018 20:34:18
Alias:
OS: Linux ELF & Glibc-2.1 Release 2.2.17-14cl #1 Wed Nov 1 20:41:39 EST 2000
Compiler: FlagShip 4.48.7452 (1024 users)


database arqncm.dbf;is multiply opened in different work areas: NFE0702.PRG, module NFE0702 line 23
Called from NFE0702(23)
Called from F_IMDT(247)
Called from F_LOTREV(77)
Called from NFE0600(36)
Called from MAIN(209)
Resumindo:
chama as duas errorsys em seguida, sendo que a minha apenas registra o erro e nada mais.

No erro acima, o Flagship nem sequer mostrava mensagem, continuava normalmente.
Ao colocar desse jeito, o erro foi registrado.
Significa que a errorsys do Flagship é chamada, mas continua normalmente.

Pode ser uma solução para aqueles que tem errorsys diferente que bagunça as mensagens de erro.

Outra forma de errorsys.

Enviado: 22 Jul 2018 10:50
por JoséQuintas
A errorsys enxuta, levemente alterada pro fórum aceitar o post.

Código: Selecionar todos

#include "error.ch"

#command ? <list,...>   =>  ?? hb_Eol() ; ?? <list>
#command ?? <list,...>  =>  OutErr(<list>)

FUNCTION JoseQuintasError( e )

   LOCAL cMessage, nCont

   cMessage := ErrorMessage(e)
   IF ! Empty( e:OsCode )
      cMessage += " (DOS Error " + Ltrim( Str( e:OsCode ) ) + ") "
   ENDIF
   Errorsys_WriteErrorLog( , 1 ) // com id maquina
   Errorsys_WriteErrorLog( cMessage )
   nCont := 2
   DO WHILE ( ! Empty( ProcName( nCont ) ) )
      cMessage := "Called from " + Trim( ProcName( nCont ) ) + "(" + Ltrim( Str( ProcLine( nCont ) ) ) + ")  "
      Errorsys_WriteErrorLog( cMessage )
      nCont++
   ENDDO
   Errorsys_WriteErrorLog( Replicate( "-", 80 ) )

   RETURN NIL

STATIC FUNCTION ErrorMessage( e )

   LOCAL cMessage := ""

   IF ( ValType( e:SubCode ) == "N" )
      cMessage += ( Ltrim(Str( e:SubCode ) ) )
   ELSE
      cMessage += "/???"
   ENDIF

   IF ( ValType( e:Description ) == "C" )
      cMessage += ( "  " + e:Description )
   ENDIF

   IF ! Empty( e:Filename )
      cMessage += (": " + e:Filename )
   ELSEIF ! Empty( e:Operation )
      cMessage += ( ": " + e:Operation )
   ENDIF

   RETURN cMessage

FUNCTION Errorsys_WriteErrorLog( cText, nDetail )

   LOCAL nHandle, cFileName, nCont, nCont2

   IF pCount() < 2
      nDetail := 0
   ENDIF
   IF pCount() < 1
      cText := ""
   ENDIF

   IF nDetail > 0
      Errorsys_WriteErrorLog()
      Errorsys_WriteErrorLog( "Error on " + Dtoc( Date() ) + " " + Time() )
      Errorsys_WriteErrorLog( "OS: " + OS() )
      Errorsys_WriteErrorLog( "Compiler: " + Version() )
      Errorsys_WriteErrorLog( "Folder: " + CurDir() )
      Errorsys_WriteErrorLog( "Alias:  " + Alias() )
      Errorsys_WriteErrorLog( "User Name: " + AppUserName() )
      Errorsys_WriteErrorLog()
   ENDIF
   cFileName := "hb_out.log"
   IF ! File( cFileName )
      nHandle := fCREATE( cFileName )
      fClose( nHandle )
   ENDIF

   nHandle := fOpen( cFileName, 1 )
   fSeek( nHandle, 0, 2 )
   fWrite( nHandle, cText + Space(2) + hb_Eol() )
   IF nDetail > 1
      nCont  := 2
      nCont2 := 0
      DO WHILE nCont2 < 5
         IF Empty( ProcName( nCont ) )
            nCont2++
         ELSE
            cText := "Called from " + Trim( ProcName( nCont ) ) + "(" + Ltrim( Str( ProcLine( nCont ) ) ) + ")  "
            fWrite( nHandle, cText + hb_Eol() )
         ENDIF
         nCont++
      ENDDO
      fWrite( nHandle, hb_Eol() )
   ENDIF
   fClose( nHandle )

   RETURN NIL

Outra forma de errorsys.

Enviado: 22 Jul 2018 10:55
por JoséQuintas
Ah sim... mandar por email?
Rotina de erros não é pra isso.
E em Flagship/Linux nem sei se os bloqueios vão permitir alguma coisa.

Mas uma vez registrado em hb_out.log, agora é pensar em como enviar por email, e como "limpar" o log.

Outra forma de errorsys.

Enviado: 28 Jul 2018 08:49
por JoséQuintas
Comentário extra sobre essa errorsys:

Lembram da pergunta Abort/Retry?

A cada retry, é um registro de erro.
A rotina adicional apenas registra, quem faz tudo é a errorsys normal.
Então... a cada entrada que faz na errorsys, primeiro registra o erro.
E não afeta em nada o funcionamento normal da errorsys.

Outra forma de errorsys.

Enviado: 05 Ago 2018 23:06
por JoséQuintas
Foi instalado o Harbour 3.2, e diz que falta a parte de conexão segura.
Não sei se o Harbour 3.4 também obrigaria, porque no Windows não.

Outra forma de errorsys.

Enviado: 06 Ago 2018 19:18
por JoséQuintas
Uma coisa é o Harbour 3.4 com Windows, que estou acostumado e faço tudo tranquilamente, até mesmo gerar do zero, sem nada dessas tranqueiras.
E que também dá pra baixar pronto.

Outra coisa é o ambiente Linux, com acesso limitado, sem nem mesmo saber gerar o Harbour.

Nesse caso a coisa pega, ou vém pronto funcionando, ou nada feito.

Não uso nem SSL nem CURL, e envio emails no Windows.
Se no Linux está obrigando a ter isso, sem chance.

Se depender de mim, seria passar o mais rápido possível pra Harbour, e abandonar o Linux, assim vou poder mexer tranquilamente.