Clipper On Line • Ver Tópico - criar log de erros do sistema

criar log de erros do sistema

Discussão sobre a linguagem CA-Clipper.

Moderador: Moderadores

 

criar log de erros do sistema

Mensagempor pena » 17 Out 2020 20:12

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
   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 de usuário

pena
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 331
Data de registro: 06 Jul 2004 18:08
Cidade/Estado: CACHOEIRA DO SUL-RS
Curtiu: 0 vez
Mens.Curtidas: 3 vezes

criar log de erros do sistema

Mensagempor Vlademiro » 17 Out 2020 20:15

É 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 de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

criar log de erros do sistema

Mensagempor Vlademiro » 17 Out 2020 20:24

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
Avatar de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

criar log de erros do sistema

Mensagempor alxsts » 17 Out 2020 23:40

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.
SET PRINTER TO 'ERRO.LOG' ADDITIVE 
[]´s
Alexandre Santos (AlxSts)
alxsts
Colaborador

Colaborador
 
Mensagens: 2945
Data de registro: 12 Ago 2008 15:50
Cidade/Estado: São Paulo-SP-Brasil
Curtiu: 21 vezes
Mens.Curtidas: 248 vezes

criar log de erros do sistema

Mensagempor Vlademiro » 17 Out 2020 23:53

#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

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 :
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

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 de usuário

Vlademiro
Usuário Nível 4

Usuário Nível 4
 
Mensagens: 749
Data de registro: 11 Jul 2005 02:46
Curtiu: 22 vezes
Mens.Curtidas: 62 vezes

criar log de erros do sistema

Mensagempor JoséQuintas » 18 Out 2020 00:38

Já responderam.
Apenas sugestão adicional:

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, multithread, dbfcdx, ADO+MySql, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar de usuário

JoséQuintas
Membro Master

Membro Master
 
Mensagens: 18151
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 15 vezes
Mens.Curtidas: 1215 vezes




Retornar para CA-Clipper

Quem está online

Usuários vendo este fórum: Google [Bot] e 1 visitante


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro