Como utilizar todo o potencial do clientlog no Progress OpenEdge

Todo mundo que trabalha ou trabalhou com Progress já passou pela necessidade de encontrar algum problema ou saber exatamente o que ocorreu em determinado ponto do programa.


O debug fica ainda mais complicado quando não temos acesso ao código fonte. Para estes casos, o Progress possui o clientlog, um recurso muito conhecido e utilizado. Sempre que precisamos de bate e pronto de ativar o clientlog, uma colinha é sempre bem-vinda.


O objetivo deste post é deixar uma consulta rápida de como ativar o clientlog no Progress Openedge e passar diversas dicas sobre como utiliza-lo de uma maneira mais prática.

Como funciona


O clientlog pode ser ativado inserindo parâmetros na PF ou em tempo de execução através do LogManager. Ele sempre vai funcionar da mesma maneira, independente da forma que for habilitado, o que muda é a sintaxe utilizada em cada caso.


Você pode utilizar o log de diversas formas e para diferentes objetivos. Eu separei um exemplo que vai atender a maioria dos casos, mesmo assim para situações específicas, consulte a documentação oficial.

Progress clientlog via PF


Habilitar o log pela PF é simples, você precisa apenas inserir os seguintes parâmetros no seu arquivo de conexão:



Ativar


-debugalert
-clientlog c:\tmp\clientlog.txt -clearlog
-logginglevel 4
-logentrytypes 4GLMessages,4GLTrace,DB.Connects,DynObjects.DB,DynObjects.XML,DynObjects.Other,DynObjects.CLASS,DynObjects.UI,FileID,ProEvents.UI.CHAR,ProEvents.UI.COMMAND,ProEvents.Other,SAX

A principal vantagem de se utilizar via PF é que quando a conexão é iniciada, todas as atividades já são gravadas no log.


A desvantagem é que você precisara alterar o arquivo .PF ou criar um arquivo exclusivo para o clientlog. Atenção! Cuidado com o tamanho do log pois ele pode crescer muito rapidamente! Falarei sobre isto mais adiante.

Progress clientlog em tempo de execução via LogManager


O Progress possui um recurso chamado LogManager que fornece uma série de métodos para trabalhar com logs. Usar o LogManager é muito simples, você precisa apenas abrir o editor (_edit.p) e executar o seguinte código:


Ativar


SESSION:DEBUG-ALERT = YES.
LOG-MANAGER:LOGFILE-NAME = "c:\tmp\clientlog.txt".
LOG-MANAGER:LOGGING-LEVEL = 4.
LOG-MANAGER:LOG-ENTRY-TYPES = "4GLMessages,4GLTrace,DB.Connects,DynObjects.DB,DynObjects.XML,DynObjects.Other,DynObjects.CLASS,DynObjects.UI,FileID,ProEvents.UI.CHAR,ProEvents.UI.COMMAND,ProEvents.Other,SAX".



Desativar


SESSION:DEBUG-ALERT = NO.
LOG-MANAGER:CLOSE-LOG().

A principal vantagem é não precisar alterar nada no PF nem em qualquer outro arquivo de configuração. Você pode inclusive criar um programa que ativa ou desativa o clientlog. Outra grande vantagem é a facilidade em depurar apenas uma pequena parte da aplicação.

Detalhe de cada parâmetro


Para que serve cada um destes parâmetros dos exemplos acima?


Via PF

Via LogManager

Para que serve?

​-debugalert

SESSION:DEBUG-ALERT

Caso o Progress retorne algum erro, toda a pilha de execução até o erro será exibida no log.

-logginglevel

LOG-MANAGER:LOGGING-LEVEL

Determina o nível de detalhamento do log, onde:

0- None - Não loga nada

1- Errors - Somente erros Progress

2- Basic - Somente log básico

3- Verbose - Modo verbose dos valores definidos no logentrytypes

4- Extended - Modo extendido dos valores definidos no logentrytypes

-logentrytypes

LOG-MANAGER:LOG-ENTRY-TYPES

Tipos de eventos que serão exibidos no log de acordo com o logginglevel definido. Um detalhe de todas as opções estão disponíveis no final deste post.

-clientlog

LOG-MANAGER:LOGFILE-NAME

Caminho e nome do arquivo do log que será gerado


Estrutura do Log


O log do Progres tem uma estrutura própria com data, cabeçalho e o conteúdo da mensagem. Veja o que significa cada parte desta estrutura:




Dicas


Algumas sacadas sobre o uso do clientlog.



Mudar o nível de detalhamento


Se você ativou o clientlog via PF, você ainda sim pode utilizar o LogManager. Neste caso o Progress deixará de manipular o log definido na PF e utilizará os parâmetros e definições do LogManager. Isto é muito útil para aumentar ou diminuir o detalhamento e para mudar o caminho e nome do arquivo de log.

Tamanho do arquivo


Como falei acima, é preciso tomar cuidado com o tamanho do log pois o arquivo cresce muito rápido, princialmente se você definiu o log para modo extended. Uma maneira de contornar isto é utilizar o método que sobreescreve o arquivo sempre que uma nova sessão for iniciada, pois, o padrão do Progress é nunca sobreescrever.


  • Via PF Insira o parametro -clearlog após o nome do log. Exemplo:


-clientlog clientlog.txt -clearlog


  • Em tempo de execução via LogManager Após iniciado e definido o log pelo LogManager, execute o seguinte método:


LOG-MANAGER:CLEAR-LOG( )


Escrever direto no log


Uma outra coisa legal é que você não precisa ficar dando MESSAGE "passou aqui" VIEW-AS ALERT-BOX no programa. Coloque as suas mensagens para saírem diretamente no clientlog. Para isto, após ativado o clientlog, execute o seguinte método:


LOG-MANAGER:WRITE-MESSAGE("passou aqui").



Especificação de cada função do clientlog



​Atributo

Para que serve?

Nivel do log

​4GLMessages

Escreve no log todas os MESSAGE com VIEW-AS ALERT-BOX.

2 - Basic

​4GLTrace

Escreve no log as chamadas de RUN, PUBLISH, FUNCTIONS, and SUBSCRIBE e funções especificas.

2 - Basic ou superior

​4GLTrans

Escreve no log o quando uma transação começou, terminou ou foi desfeita.

2 - Basic ou superior

​DB.Connects

Escreve no log as aberturas e fechamentos de conexão com o bando de dados, incluindo o nome e id do usuário.

2 - Basic ou superior

DynObjects.DB

DynObjects.XML

DynObjects.Other

DynObjects.UI

Escreve no log a criação e remoção de qualquer tipo de objeto dinâmico.

2 - Basic

3 - Verbose para detalhes da pilha

FileID

Escreve no log a abertura, fechamento e erros de programas e arquivos.

2 - Basic e superior

ProEvents.UI.Char

ProEvents.UI.Command

ProEvents.Other

Escreve no log todos os eventos Progress de todas as categorias

2 - Basic ou superior

SAX

Escreve no log as chamadas SAX. SAX é um parser de XML.

​2 - Basic


Espero ter ajudado! Nos avisem caso tenha alguma observação, comentário ou correção!

206 views0 comments

Recent Posts

See All