LOG do que o Usuário fez no Sistema
Moderador: Moderadores
LOG do que o Usuário fez no Sistema
Olá nobres colegas,
Venho até as mais brilhantes mentes de nossa nação, para solicitar:
- Dicas, Sugestões, Conselhos, Normas, Regras, Pormenores, Detalhes, enfim experiência para a seguinte questão:
Tenho um cliente em específico que esta alegando q "somem" as vendas do sistema, após troca de hd, remoção de vírus, desativação do recurso de Cache do XP, nobreaks, troca de switch, rede, implementação do uso de TS, não sobrou mais pra onde fugir, para nós ele esta usando uma função do sistema q é a Troca ou RecuperarDados, o mesmo alega q não nem seus funcionários...
... resumindo isto abriu precedente para eu implementar em meu sistema uma funcionalidade que a tempos pensei mas não fiz, a de GRAVAR um LOG do que o usuário fez, isto resolveria meu problema, pois iria trabalhar com fatos e não suposições do que ocorreu no cliente, se ele usou ou não determinada função.
Algum colega tem isto implementado? Poderia contribuir com o tópico compartilhando sua experiência... A princípio vou monitorar todas as chamadas de função que Apagam os dados no arquivo de venda para resolver este cliente, mas pretendo estender esta funcionalidade para todo o sistema.
Desde já, grato.
Sds.
Sucesso!!! :)Pos
Venho até as mais brilhantes mentes de nossa nação, para solicitar:
- Dicas, Sugestões, Conselhos, Normas, Regras, Pormenores, Detalhes, enfim experiência para a seguinte questão:
Tenho um cliente em específico que esta alegando q "somem" as vendas do sistema, após troca de hd, remoção de vírus, desativação do recurso de Cache do XP, nobreaks, troca de switch, rede, implementação do uso de TS, não sobrou mais pra onde fugir, para nós ele esta usando uma função do sistema q é a Troca ou RecuperarDados, o mesmo alega q não nem seus funcionários...
... resumindo isto abriu precedente para eu implementar em meu sistema uma funcionalidade que a tempos pensei mas não fiz, a de GRAVAR um LOG do que o usuário fez, isto resolveria meu problema, pois iria trabalhar com fatos e não suposições do que ocorreu no cliente, se ele usou ou não determinada função.
Algum colega tem isto implementado? Poderia contribuir com o tópico compartilhando sua experiência... A princípio vou monitorar todas as chamadas de função que Apagam os dados no arquivo de venda para resolver este cliente, mas pretendo estender esta funcionalidade para todo o sistema.
Desde já, grato.
Sds.
Sucesso!!! :)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: LOG do que o Usuário fez no Sistema
Amiguinho,
Analise esta função e acrescente-a ao .PRG principal:
Tenho pra mim que voce usa .CH sendo chamados para o seu sistema.
Se voce usa um .CH proprio, tipo FLADIMIR.CH, em todos os seus .PRGs então acrescente as seguintes linhas a eles e recompile todos os .PRGs:
Teste e me diga se serve.
Analise esta função e acrescente-a ao .PRG principal:
Código: Selecionar todos
FUNCTION dbCommitLog( LOG_TIPO, PROCNAME )
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 := PROCNAME
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.)
Se voce usa um .CH proprio, tipo FLADIMIR.CH, em todos os seus .PRGs então acrescente as seguintes linhas a eles e recompile todos os .PRGs:
Código: Selecionar todos
#command APPEND BLANK => dbAppend( 0 ) ; dbCommitLog( 'I', PROCNAME() )
#command PACK => __dbPack() ; dbCommitLog( 'E', PROCNAME() )
#command ZAP => __dbZap() ; dbCommitLog( 'E', PROCNAME() )
#command REGLOCK => dbRegLock( 0 ) ; dbCommitLog( 'M', PROCNAME() )
#command REGLOCK <n> => dbRegLock( <n> ) ; dbCommitLog( 'M', PROCNAME() )
#command FILELOCK => dbFileLock( 0 ) ; dbCommitLog( 'M', PROCNAME() )
#command FILELOCK <n> => dbFileLock( <n> ) ; dbCommitLog( 'M', PROCNAME() )
#command DELETE => dbRegLock(0) ; dbDelete() ; dbCommitLog('E', PROCNAME())
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Re: LOG do que o Usuário fez no Sistema
Ok Rochinha, olhando rapidamente parece q atende melhor do q pensei, vou implementar e posto os resultados...
Só uma pequena dúvida...
Trabalho muito com:
A dúvida é se fazendo da maneira q exemplificou no Cabeçalho pegara tb? Bom vou testar e aviso depois se deu...
Outra coisa estive pensando em estender esta função colocando um parametro chamado cInfExtra
Pensei em criar esta variavel no inicio do programa como Publica e sempre q chamar a função de algum lugar alimentar o valor dela para gravar no Backup.Log com alguma Informação Extra e no final da função antes do Return fazer um
cInfExtra := " "
O que os colegas acham???
Grato e Sds.
Sucesso!!!
:)Pos
Só uma pequena dúvida...
Trabalho muito com:
Código: Selecionar todos
TabelaDBF->( DbDelete() )Outra coisa estive pensando em estender esta função colocando um parametro chamado cInfExtra
Pensei em criar esta variavel no inicio do programa como Publica e sempre q chamar a função de algum lugar alimentar o valor dela para gravar no Backup.Log com alguma Informação Extra e no final da função antes do Return fazer um
cInfExtra := " "
O que os colegas acham???
Grato e Sds.
Sucesso!!!
:)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Re: LOG do que o Usuário fez no Sistema
Deu certo... obrigado Rochinha...
Agora uma dúvida eu fiz uma pequena alteração para pegar o nr. da linha e a tabela q foi modificada, mas não esta aparecendo certo...
Explico, numa venda tenho a tabela TEMP, Produtos, MovVenda, Vendas, Clientes e outras abertas, em uma determinada etapa q ocorre um:
Ai no log mostra q foi na tabela TEMP (area corrente) mas foi na tabela MovVenda q estava aberta, mas não era a Area corrente, como proceder???
Abaixo o código do cabeçalho q manda a informação para a função dbCommitLog()
Sds.
Sucesso!!! :)Pos
Agora uma dúvida eu fiz uma pequena alteração para pegar o nr. da linha e a tabela q foi modificada, mas não esta aparecendo certo...
Explico, numa venda tenho a tabela TEMP, Produtos, MovVenda, Vendas, Clientes e outras abertas, em uma determinada etapa q ocorre um:
Código: Selecionar todos
MovVenda->(DbDelete())Abaixo o código do cabeçalho q manda a informação para a função dbCommitLog()
Código: Selecionar todos
#command APPEND BLANK => dbAppend( 0 ) ; dbCommitLog( 'I', PROCNAME(), PROCLINE(), Alias(Select()) )
#command PACK => __dbPack() ; dbCommitLog( 'E', PROCNAME(), PROCLINE(), Alias(Select()) )
#command ZAP => __dbZap() ; dbCommitLog( 'E', PROCNAME(), PROCLINE(), Alias(Select()) )
#command REGLOCK => dbRegLock( 0 ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command REGLOCK <n> => dbRegLock( <n> ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command FILELOCK => dbFileLock( 0 ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command FILELOCK <n> => dbFileLock( <n> ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command DELETE => dbRegLock(0) ; dbDelete() ; dbCommitLog( 'E', PROCNAME(), PROCLINE(), Alias(Select()) )Sucesso!!! :)Pos
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
-
Stanis Luksys
- Colaborador

- Mensagens: 1329
- Registrado em: 18 Jun 2005 03:04
- Localização: São Paulo
- Contato:
Re: LOG do que o Usuário fez no Sistema
Olá,
Legal mesmo a função... Bem prática e simples de ser implementada. Acho que para ficar mais legal e incrementada, poderia usar uma criptografia simples antes de gravar no txt, e já que está usando xharbour, até mesmo compactar o txt.
Compactar exigiria muito tempo de cpu o que pode atrapalhar se o commit for realizado com muita frequência, e principalmente em muitos teminais. Mas dar um cript bem basicão seria legal, assim o cara não acha o nome dele pelo simples "pesquisar" do windows. Usuário é esperto!
Então você poderia criar um memoedit simples onde decripta e exibe o log ao mega master usuário.
Abraços!
Legal mesmo a função... Bem prática e simples de ser implementada. Acho que para ficar mais legal e incrementada, poderia usar uma criptografia simples antes de gravar no txt, e já que está usando xharbour, até mesmo compactar o txt.
Compactar exigiria muito tempo de cpu o que pode atrapalhar se o commit for realizado com muita frequência, e principalmente em muitos teminais. Mas dar um cript bem basicão seria legal, assim o cara não acha o nome dele pelo simples "pesquisar" do windows. Usuário é esperto!
Então você poderia criar um memoedit simples onde decripta e exibe o log ao mega master usuário.
Abraços!
Stanis Luksys
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
sites.google.com/hblibs
Apoiar e se utilizar de projetos opensource não é uma questão de boicote, mas sim de liberdade.
Utilize, aprimore e distribua.
Re: LOG do que o Usuário fez no Sistema
Deu certo com a variavel Publica, crei no inicio do programa assim:
Ai depois na função dbCommitLog() na linha q grava o log coloco pra gravar a variavel acima.
Com isso em qualquer lugar do sistema q eu queira especificar melhor o log defino o conteudo da variavel exemplo:
e antes do Return da Função dbCommitLog() cologo pra digamos assim zerar o conteudo dela assim:
Stanis Luksys - Obrigado pela dica tb.
Vlw pessoal
Sds....
:-Y
Código: Selecionar todos
Public cDBCommitLog := ' 'Código: Selecionar todos
Function dbCommitLog(....)
....
FWRITE(errhandle,DTOC(DATE())+" "+TIME()+" "+M->OPERADOR+" "+M->MODULO+" "+M->MINHA_INFO+ cDBCommitLog + &ret_line.)
...
Código: Selecionar todos
cDBCommitLog := "Usuario fez isso e akilo"Código: Selecionar todos
Function dbCommitLog(....)
....
cDBCommitLog := ' '
Return
Vlw pessoal
Sds....
:-Y
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Re: LOG do que o Usuário fez no Sistema
Olá
Também vale à pena dar uma olhada nas funções nativas de LOG do [x]Harbour. Ainda não usei esse recurso mas parece que está bem estruturada e é algo padrão do sistema.
T+
Também vale à pena dar uma olhada nas funções nativas de LOG do [x]Harbour. Ainda não usei esse recurso mas parece que está bem estruturada e é algo padrão do sistema.
T+
Re: LOG do que o Usuário fez no Sistema
Quais funções colega conhece pelo menos o nome de alguma ?
Sds.
Sds.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Re: LOG do que o Usuário fez no Sistema
Oi, pessoal...
Peguei carona nas idéias desse tópico, mas qdo vou compilar no meu xharbour 1.00 com a GTWIN (texto) + DBFCDX, sou avisado que me falta a função abaixo...
HB_FUN_DBREGLOCK
Ce podem me dizer Em qual lib essa função se encontra , caso seja realmente esse o problema ?
Grato,
Gabriel
Peguei carona nas idéias desse tópico, mas qdo vou compilar no meu xharbour 1.00 com a GTWIN (texto) + DBFCDX, sou avisado que me falta a função abaixo...
HB_FUN_DBREGLOCK
Ce podem me dizer Em qual lib essa função se encontra , caso seja realmente esse o problema ?
Grato,
Gabriel
lugab
Re: LOG do que o Usuário fez no Sistema
coloca DBRLOCK
Sds.
Sds.
Sun Tzu há mais de três mil anos cita nas epígrafes de seu livro “A Arte da Guerra“:
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
“Concentre-se nos pontos fortes, reconheça as fraquezas, agarre as oportunidades e proteja-se contra as ameaças”.
“Se não é vantajoso, nunca envie suas tropas; se não lhe rende ganhos, nunca utilize seus homens; se não é uma situação perigosa, nunca lute uma batalha precipitada”.
Até 2017 Desktop Console [ Legado ] Harbour | MinGW | DBF | CDX | FastReport | MySQL
Novos Projetos:
Desktop Visual Windev Desktop
Celular Android/iOS Windev Mobile
WEB Windev Web
Sejamos gratos a Deus.
Re: LOG do que o Usuário fez no Sistema
Olá
HB_InitStandardLog()
HB_OpenStandardLog()
HB_StandardLogAdd()
HB_SetStandardLogStyle()
HB_StandardLogName()
HB_BldLogMsg()
HB_LogDateStamp()
CLASS HB_Logger
CLASS HB_LogConsole FROM HB_LogChannel
CLASS HB_LogFile FROM HB_LogChannel
CLASS HB_LogDbf FROM HB_LogChannel
CLASS HB_LogSyslog FROM HB_LogChannel
CLASS HB_LogDebug FROM HB_LogChannel
CLASS HB_LogEmail FROM HB_LogChannel
CLASS HB_LogInetPort FROM HB_LogChannel
#xcommand INIT LOG [ON] ;
[<fil: FILE> ([<nFilPrio> [,<cFileName>[,<nFileSize>[,<nFileCount>]]]])] ;
[<con: CONSOLE> ([<nConPrio>])] ;
[<mon: MONITOR> ([<nMonPrio>[,<nMonPort>]])] ;
[<sys: SYSLOG> ([<nSysPrio>[,<nSysId>]])] ;
[<ema: EMAIL> ([<nEmaPrio> [,<cHelo>[,<cServer>[,<cDest>[,<cSubject>[,<cFrom>]]]]]])] ;
[<dbg: DEBUG> ( [<nDebugPrio> [,<nMaxDebugPrio>]] )] ;
[NAME <cName>]=>;
HB_InitStandardLog() ;;
if <.con.>;;
HB_StandardLogAdd( HB_LogConsole():New( <nConPrio> ));;
end ;;
if <.fil.> ;;
HB_StandardLogAdd( HB_LogFile():New( <nFilPrio>, <cFileName>, <nFileSize>, <nFileCount> ));;
end ;;
if <.mon.> ;;
HB_StandardLogAdd( HB_LogInetPort():New( <nMonPrio>, <nMonPort> ));;
end ;;
if <.sys.> ;;
HB_StandardLogAdd( HB_LogSyslog():New( <nSysPrio>, <nSysId> ));;
end ;;
if <.ema.> ;;
HB_StandardLogAdd( HB_LogEmail():New( <nEmaPrio> ,<cHelo>,<cServer>,<cDest>,<cSubject>,<cFrom>));;
end ;;
if <.dbg.> ;;
HB_StandardLogAdd( HB_LogDebug():New( <nDebugPrio>, <nMaxDebugPrio> ) ) ;;
end ;;
HB_StandardLogName( <cName> );;
HB_OpenStandardLog()
#xcommand SET LOG STYLE <nStyle> => HB_SetStandardLogStyle( <nStyle> )
#xcommand LOG <data,...> [PRIORITY <prio>] => ;
HB_StandardLog( HB_BldLogMsg( <data> ), <prio> )
#xcommand LOG <data,...> [PRIO <prio>] => ;
HB_StandardLog( HB_BldLogMsg( <data> ), <prio> )
#xcommand CLOSE LOG => HB_CloseStandardLog()
#xtranslate PRIO[RITY] DEFAULT => PRIO HB_LOG_DEFAULT
#xtranslate PRIO[RITY] CRITICAL => PRIO HB_LOG_CRITICAL
#xtranslate PRIO[RITY] ERROR => PRIO HB_LOG_ERROR
#xtranslate PRIO[RITY] WARNING => PRIO HB_LOG_WARNING
#xtranslate PRIO[RITY] WARN => PRIO HB_LOG_WARN
#xtranslate PRIO[RITY] INFO => PRIO HB_LOG_INFO
#xtranslate PRIO[RITY] DEBUG => PRIO HB_LOG_DEBUG
A lista não está completa.
T+
HB_InitStandardLog()
HB_OpenStandardLog()
HB_StandardLogAdd()
HB_SetStandardLogStyle()
HB_StandardLogName()
HB_BldLogMsg()
HB_LogDateStamp()
CLASS HB_Logger
CLASS HB_LogConsole FROM HB_LogChannel
CLASS HB_LogFile FROM HB_LogChannel
CLASS HB_LogDbf FROM HB_LogChannel
CLASS HB_LogSyslog FROM HB_LogChannel
CLASS HB_LogDebug FROM HB_LogChannel
CLASS HB_LogEmail FROM HB_LogChannel
CLASS HB_LogInetPort FROM HB_LogChannel
#xcommand INIT LOG [ON] ;
[<fil: FILE> ([<nFilPrio> [,<cFileName>[,<nFileSize>[,<nFileCount>]]]])] ;
[<con: CONSOLE> ([<nConPrio>])] ;
[<mon: MONITOR> ([<nMonPrio>[,<nMonPort>]])] ;
[<sys: SYSLOG> ([<nSysPrio>[,<nSysId>]])] ;
[<ema: EMAIL> ([<nEmaPrio> [,<cHelo>[,<cServer>[,<cDest>[,<cSubject>[,<cFrom>]]]]]])] ;
[<dbg: DEBUG> ( [<nDebugPrio> [,<nMaxDebugPrio>]] )] ;
[NAME <cName>]=>;
HB_InitStandardLog() ;;
if <.con.>;;
HB_StandardLogAdd( HB_LogConsole():New( <nConPrio> ));;
end ;;
if <.fil.> ;;
HB_StandardLogAdd( HB_LogFile():New( <nFilPrio>, <cFileName>, <nFileSize>, <nFileCount> ));;
end ;;
if <.mon.> ;;
HB_StandardLogAdd( HB_LogInetPort():New( <nMonPrio>, <nMonPort> ));;
end ;;
if <.sys.> ;;
HB_StandardLogAdd( HB_LogSyslog():New( <nSysPrio>, <nSysId> ));;
end ;;
if <.ema.> ;;
HB_StandardLogAdd( HB_LogEmail():New( <nEmaPrio> ,<cHelo>,<cServer>,<cDest>,<cSubject>,<cFrom>));;
end ;;
if <.dbg.> ;;
HB_StandardLogAdd( HB_LogDebug():New( <nDebugPrio>, <nMaxDebugPrio> ) ) ;;
end ;;
HB_StandardLogName( <cName> );;
HB_OpenStandardLog()
#xcommand SET LOG STYLE <nStyle> => HB_SetStandardLogStyle( <nStyle> )
#xcommand LOG <data,...> [PRIORITY <prio>] => ;
HB_StandardLog( HB_BldLogMsg( <data> ), <prio> )
#xcommand LOG <data,...> [PRIO <prio>] => ;
HB_StandardLog( HB_BldLogMsg( <data> ), <prio> )
#xcommand CLOSE LOG => HB_CloseStandardLog()
#xtranslate PRIO[RITY] DEFAULT => PRIO HB_LOG_DEFAULT
#xtranslate PRIO[RITY] CRITICAL => PRIO HB_LOG_CRITICAL
#xtranslate PRIO[RITY] ERROR => PRIO HB_LOG_ERROR
#xtranslate PRIO[RITY] WARNING => PRIO HB_LOG_WARNING
#xtranslate PRIO[RITY] WARN => PRIO HB_LOG_WARN
#xtranslate PRIO[RITY] INFO => PRIO HB_LOG_INFO
#xtranslate PRIO[RITY] DEBUG => PRIO HB_LOG_DEBUG
A lista não está completa.
T+
-
lapinhazzz
- Usuário Nível 3

- Mensagens: 130
- Registrado em: 20 Abr 2009 10:52
- Localização: LAGOA
Re: LOG do que o Usuário fez no Sistema
Bom Dia a todos do Forum,
Estive a ver o código do log e não percebi nada.
Será que me podem postar a rotina final para incorporar nos meus programas.
Ainda sou um novato tenho 2 niveis de conhecimento.
Agradeço se for possivel postarem a rotina completa.
Obrigado.
Lapinhazzz
Estive a ver o código do log e não percebi nada.
Será que me podem postar a rotina final para incorporar nos meus programas.
Ainda sou um novato tenho 2 niveis de conhecimento.
Agradeço se for possivel postarem a rotina completa.
Obrigado.
Lapinhazzz
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: LOG do que o Usuário fez no Sistema
Amiguinho,
O forum não possui ferramentas nem pessoal para monitorar o nivel de conhecimento de seus usuários. Todos, sem excessão, que acessam este forum, seja para pesquisar, consultar ou dar consultoria são nivelados pelo montante de mensagens postadas ou respostas.
Quanto a sua necessidade, não ficou bem claro o que voce não entendeu, mas vou lhe explicar de forma rápida.
Em um pequeno programa de cadastramento onde figuram comandos como APPEND BLANK, REPLACE, DELETE, COMMIT, etc os sistemas se comportam normalmente pelos recursos da própria linguagem.
A idéia do código postado é acrescentar recurso sem fazer modificações no código.
Quando coloco:
Estou incrementando o comando original, lógico, desde que o programador use a sintaxe de comandos para sua codificação.
Para usuários como eu que costumam usar o método direto de acesso usando as funções, ai é necessário recodificar.
Exemplo conservador o que eu indico, principalmente para quem deseja aprender sem errar:
No estilo de código acima se voce incluir as chamadas extendidas com controle de log a cada comando o log será assinado.
Programação avançada:
No método acima voce precisa acrescentar os comandos manualmente e se não quiser usar deve excluir cada linha extra.
O método avançado não surte diferença nenhuma do rendimento do código ou da aplicação, portanto se voce esta começando a conhecer a linguagem use o método conservador e acrescente no inicio de cada .PRG as chamadas:
Elas irão enganar o compilador acrescentando recursos fora do padrão.
O forum não possui ferramentas nem pessoal para monitorar o nivel de conhecimento de seus usuários. Todos, sem excessão, que acessam este forum, seja para pesquisar, consultar ou dar consultoria são nivelados pelo montante de mensagens postadas ou respostas.
Quanto a sua necessidade, não ficou bem claro o que voce não entendeu, mas vou lhe explicar de forma rápida.
Em um pequeno programa de cadastramento onde figuram comandos como APPEND BLANK, REPLACE, DELETE, COMMIT, etc os sistemas se comportam normalmente pelos recursos da própria linguagem.
A idéia do código postado é acrescentar recurso sem fazer modificações no código.
Quando coloco:
Código: Selecionar todos
#command APPEND BLANK => dbAppend( 0 ) ; dbCommitLog( 'I', PROCNAME(), PROCLINE(), Alias(Select()) )
Para usuários como eu que costumam usar o método direto de acesso usando as funções, ai é necessário recodificar.
Exemplo conservador o que eu indico, principalmente para quem deseja aprender sem errar:
Código: Selecionar todos
USE clientes INDEX clientes SHARED NEW
...
APPEND BLANK
REPLACE campo WITH variavel
...
COMMIT
UNLOCK
Programação avançada:
Código: Selecionar todos
dbUseArea( .T., , "clientes", , if(.T. .or. .F., !.F., NIL), .F., ) ; dbSetIndex( "clientes" )
...
dbAppend()
_FIELD->campo := variavel
...
dbCommitAll()
dbUnlock()
O método avançado não surte diferença nenhuma do rendimento do código ou da aplicação, portanto se voce esta começando a conhecer a linguagem use o método conservador e acrescente no inicio de cada .PRG as chamadas:
Código: Selecionar todos
#command APPEND BLANK => dbAppend( 0 ) ; dbCommitLog( 'I', PROCNAME(), PROCLINE(), Alias(Select()) )
#command PACK => __dbPack() ; dbCommitLog( 'E', PROCNAME(), PROCLINE(), Alias(Select()) )
#command ZAP => __dbZap() ; dbCommitLog( 'E', PROCNAME(), PROCLINE(), Alias(Select()) )
#command REGLOCK => dbRegLock( 0 ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command REGLOCK => dbRegLock( ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command FILELOCK => dbFileLock( 0 ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command FILELOCK => dbFileLock( ) ; dbCommitLog( 'M', PROCNAME(), PROCLINE(), Alias(Select()) )
#command DELETE => dbRegLock(0) ; dbDelete() ; dbCommitLog( 'E', PROCNAME(), PROCLINE(), Alias(Select()) )
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
-
lapinhazzz
- Usuário Nível 3

- Mensagens: 130
- Registrado em: 20 Abr 2009 10:52
- Localização: LAGOA
