criar log de erros do sistema

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

pena
Usuário Nível 3
Usuário Nível 3
Mensagens: 331
Registrado em: 06 Jul 2004 18:08
Localização: CACHOEIRA DO SUL-RS

criar log de erros do sistema

Mensagem por pena »

boa noite, queria uma ajuda de como fazer, estou gerando um log quando acontece algumas alterações controladas ou erros do sistema, só que ele não esta incrementado a linha, e sim sempre gerando um arquivo novo, alguém teria um exemplo de como fazer, sei que estou fazendo errado, mas não sei como manipular arquivos textos. Estou fazendo assim

Código: Selecionar todos

   SET PRINT ON
   SET DEVICE TO PRINT
   SET PRINTER TO "ERRO.LOG"
   @ PROW()+1,01 SAY TEXTO
   SET PRINTER TO
   SET DEVICE TO SCREEN

Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

criar log de erros do sistema

Mensagem por Vlademiro »

É melhor usar funções de escrita em arquivo. Vou procurar aqui e posto pra vc. Não agora porque não estou no computador, quer dizer, estou no computador mas é smartphone.
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

criar log de erros do sistema

Mensagem por Vlademiro »

Olhando o seu código vc deve colocar set printer to arquivo antes da chamada da função. Dentro da função apenas set device to print e screen.

Mas de qualquer maneira é melhor com função tipo fwrite
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

criar log de erros do sistema

Mensagem por alxsts »

Olá!
O uso das funções de baixo nível é mais sofisticado e
Permite um maior controle. Mas o set PRINTER TO... é menos trabalhoso. No teu caso faltou colocar a cláusula ADDITIVE. Com isto, ao invés de criar um novo arquivo, o sistema faz append no arquivo que já existe.

Código: Selecionar todos

SET PRINTER TO 'ERRO.LOG' ADDITIVE 
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

criar log de erros do sistema

Mensagem por Vlademiro »

Código: Selecionar todos

#include "fileio.ch"
FUNCTION FLogTXT( cTexto , cLogName , cLogLevel )

     LOCAL nHandle, cContent
     LOCAL cPreTexto := DTOS( DATE() ) + " - " + TIME() + " >> " 
     LOCAL cName := DTOS(DATE()) + ".log"


     hb_Default( @cLogLevel , "STANDARD" )
     cLogLevel := " [ " + cLogLevel + " ] "

     cName := hb_DefaultValue( cLogName , cName )
     IF .NOT. FILE( cName )
          nHandle := FCREATE( cName )
     ELSE
          nHandle := FOPEN( cName , FO_READWRITE + FO_SHARED )
     ENDIF 

     FSEEK( nHandle  ,0,2)

     cContent := cPreTexto + cLogLevel + cTexto 
     FWRITE( nHandle , cContent + HB_EOL() )
     FCLOSE( nHandle )

     RETURN cContent

Vc pode adaptar essa função para uso próprio.
Do jeito que ela está basta chamar assim, por exemplo

Código: Selecionar todos

FLogTXT( "A mensagem que vc quer criar" )
Ele vai criar um log no seguinte formato 20201017.log (é o ano+mes+dia seguida da extensao .log)

Caso queira informar o nome do arquivo :

Código: Selecionar todos

FLogTXT( "A mensagem que vc quer criar" , "nome.log" )
Ele vai criar um arquivo nome.log

Se vc quiser acrescentar uma mensagem antes do log, tipo a severidade. Por exemplo: INFO, WARNING, FATAL, etc pode fazer assim

Código: Selecionar todos

FLogTXT( "A mensagem que vc quer criar" , NIL , "WARNING" )
Ele vai criar um log no seguinte formato 20201017.log com a mensagem "[WARNING]" antes da sua mensagem.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

criar log de erros do sistema

Mensagem por JoséQuintas »

Já responderam.
Apenas sugestão adicional:

Código: Selecionar todos

FUNCTION Errorsys_WriteErrorLog( cText, nDetail )

   LOCAL hFileOutput, cFileName, nCont, nCont2

   hb_Default( @cText, "" )
   hb_Default( @nDetail, 0 )

   IF nDetail > 0
      Errorsys_WriteErrorLog()
      Errorsys_WriteErrorLog( "Error on "       + Dtoc( Date() ) + " " + Time() )
      Errorsys_WriteErrorLog( "EXE Name; " + hb_Argv(0) )
      Errorsys_WriteErrorLog( "JPA: "           + AppVersaoExe() )
      Errorsys_WriteErrorLog( "Login JPA: "     + AppUserName() )
      Errorsys_WriteErrorLog( "Alias:  "        + Alias() )
      Errorsys_WriteErrorLog( "Folder: "        + hb_cwd() )
      Errorsys_WriteErrorLog( "Windows: "       + OS() )
      Errorsys_WriteErrorLog( "Computer Name: " + GetEnv( "COMPUTERNAME" ) )
      Errorsys_WriteErrorLog( "Windows User: "  + GetEnv( "USERNAME" ) )
      Errorsys_WriteErrorLog( "Logon Server: "  + Substr( GetEnv( "LOGONSERVER" ), 2 ) )
      Errorsys_WriteErrorLog( "User Domain: "   + GetEnv( "USERDOMAIN" ) )
      Errorsys_WriteErrorLog( "Harbour: "       + Version() )
      Errorsys_WriteErrorLog( "Compiler: "      + HB_Compiler() )
      Errorsys_WriteErrorLog( "GT: "            + hb_GtInfo( HB_GTI_VERSION ) )
      Errorsys_WriteErrorLog()
      Errorsys_WriteErrorLog()
   ENDIF
   cFileName := "hb_out.log"
   IF ! File( cFileName )
      hFileOutput := fCREATE( cFileName )
      fClose( hFileOutput )
   ENDIF

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

   RETURN NIL
Desse jeito eu chamo de qualquer parte do aplicativo, em situações especiais.
Por exemplo, rejeição de NFE.
Informações adicionais podem ser interessantes, inclusive a "call stack".

o uso de hb_out.log, é porque esse nome é usado pelo Harbour pra outros tipos de erro, que não passam pela errorsys.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder