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.