Jump to content
Fivewin Brasil

Captura de Tela


EduViggiano

Recommended Posts

Bom dia Xará

Não seria melhor o uso do bom e velho LOG ?

Penso que necessitaria de uma capacidade muito grande de armazenamento em disco pra se registrar em video o uso do sistema.

Além de ficar complicado de se encontrar o que deseja, imagina você tentar descobrir "a que horas o usuário mudou aquele parâmetro que ferrou com tudo no sistema" e ter que assistir o video todo pra talvez encontrar o que se busca...

Usando o log, você grava as alterações feitas nos registros e necessitaria de muito menos espaço em disco( além, é claro, de ficar muito mais simples de encontrar o que se busca )

Acho que não entendi o propósito desse video, mas continuo afirmando que o log é melhor nessa situação( a menos que seja pra um sistema de segurança de câmeras de vigilância huahauha )

Link to comment
Share on other sites

Amiguinhos,

Reforçando a tese do nosso amigo Eduardo Bilato o uso de LOG atua como um trace/debug de nossas aplicações. A diferença é que o trace/debug mostra o caminho percorrido pelo código e o log o caminho percorrido pelo usuário(causador do bug).

Veja como implementei isto em meu sistema, mudando apenas um cabeçalho.

#command APPEND BLANK             => dbAppend( 0 ) ; dbCommitLog('I', PROCNAME(), PROCLINE() )
#command APPEND BLANK             => dbAppend(  )
#command APPEND TO <(file)>       => AppendToFile( <(file)> )
#command APPEND REG FROM <(file)> => AppendFromFile( <(file)> )
#command PACK                     => __dbPack() ; dbCommitLog('E', PROCNAME(), PROCLINE())
#command ZAP                      => __dbZap()  ; dbCommitLog('E', PROCNAME(), PROCLINE())
#command COMMIT                   => dbUnlock() ; dbCommitAll()
#command SKIP 0                   => dbUnlock() ; dbCommitAll()
#command REGLOCK                  => dbRegLock( 0 )    ; dbCommitLog('M', PROCNAME(), PROCLINE())
#command REGLOCK                  => dbRLock(  )  ; dbCommitLog('M', PROCNAME(), PROCLINE())
#command FILELOCK                 => dbFileLock( 0 )   ; dbCommitLog('M', PROCNAME(), PROCLINE())
#command FILELOCK                 => dbFileLock(  ) ; dbCommitLog('M', PROCNAME(), PROCLINE())
#command DELETE                   => dbNetRegLock(0);         dbDelete() ; dbCommitLog('E', PROCNAME(), PROCLINE())

#define LOG_USER

Sou programador do tempo do COBOL 80 que exigia uma sintaxe completa e didática. Sou programador prá-lá de avançado mas nunca mostrei isto diretamente no código, sempre codifico os comandos em sua sintaxe total, sem comer letra. O final é um código entendível e de fácil aprendizado.

O trecho acima faz modificações no curso dos comandos de forma que ele funcionarão normalmente na aplicação, mas farão ações extras.

Como se vê, a função dbCommitLog() não é padrão da linguagem, mas é acionada em cada movimentação de registros.

FUNCTION dbCommitLog( LOG_TIPO, PROCNAME, PROCLINE )
  LOCAL ret_line := "chr(13)+chr(10)", errfile  := "backup.log"
  IF     LOG_TIPO = 'A'
         M->MINHA_INFO    := 'ABERTURA'
  ELSEIF LOG_TIPO = 'I'
         M->MINHA_INFO    := 'INCLUSAO'
  ELSEIF LOG_TIPO = 'E'
         M->MINHA_INFO    := 'EXCLUSAO'
  ELSEIF LOG_TIPO = 'M'
         M->MINHA_INFO    := 'MANUTENCAO'
  ENDIF
  M->MODULO  := alltrim(PROCNAME)+" Linha: "+alltrim(strzero(PROCLINE,9))
  IF !FILE(errfile)
     errhandle = FCREATE(errfile)
     FWRITE(errhandle,"Segue lista de processos detectados."+&ret_line.+&ret_line.)
     FWRITE(errhandle,"Data     Hora     Operador             Processo"+&ret_line.)
     FWRITE(errhandle,replicate("-",80)+&ret_line.+&ret_line.)
  ELSE
     errhandle = FOPEN(errfile,1)
     length    = FSEEK(errhandle,0,2)
     FSEEK(errhandle,length)
  ENDIF                                                        
  FWRITE(errhandle,DTOC(DATE())+" "+TIME()+" "+M->OPERADOR+" "+M->MODULO+" "+M->MINHA_INFO+&ret_line.)
  FCLOSE(errhandle)
  RETURN(.T.)

Além disto é claro que ainda na intenção de manusear vídeos para o monitoramento haverá a necessidade você criar um aplicativo externo para tal já que se embutir em seu sistema e o peso deste trabalho quebrar a execução você estará sendo traído pelo seu segurança.

O LOG como foi frisado é o seu maior aliado, leve, rápido e com as suas definições.

Em adicional, vale dizer que o xHarbour tem comandos e funções próprias para este tipo de trabalho, mas não uso xHarbour, sendo elas:

HB_InitStandardLog()
HB_OpenStandardLog()
HB_StandardLogAdd()
HB_SetStandardLogStyle()
HB_StandardLogName()
HB_BldLogMsg()
HB_LogDateStamp()

Veja nos helps sobre tais funções.

Caso não queira instalar estes aplicativos na maquina a ser monitorada voce pode usar o gravador de sessão do teamviewer. Voce instala ele na maquina que será acessada, configura pasta de gravação de sessão em configurações avançadas. A sessões são compactadas e só podem ser visualizadas pelo teamviewer.

Mais uma dica é sobre uma modificação feita por amigos aqui no forum sobre o ErrSysW.prg que grava uma foto do erro ocorrido em formato .BMP e que talvez te ajude também. Pesquise aqui mesmo.

Link to comment
Share on other sites

Opa Srs.! obrigado mesmo pelo retorno, Eu consegui detectar o problema utilizando uma pancada de LOG, exemplo

cLOG += " ponto 1 " + Time()

memowrit ...

cLOG += " ponto 2 " + Time()

memowrit ...

até chegar no ponto, só que só acontecia se o meu cliente escolhia uma exata sequencia de trabalho até o erro, impressionante, por isso a idéia de "filmar",

até pra ver casos que ele sai pelo "X" e não pelo "Sair", aqui tenho casos do famoso: "lá acontece e aqui não" rsrs

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...