Consultor Eletrônico



Kbase 70388: "Geração de logs via código 4GL / ABL"
Autor   Marco Aurelio Scheidt - Tecnologia
Acesso   Público
Publicação   19/03/2018
Em várias situações nos deparamos com a necessidade de geração de mensagens de log a partir de programas, seja para rastreabilidade (tracing), depuração (debugging) ou verificação de problemas (troubleshooting).

Para atender a esta necessidade, frequentemente os programadores geram mensagens em tela (MESSAGE ou DISPLAY) ou geram logs em arquivos (OUTPUT STREAM TO / PUT STREAM). No entanto, a exibição de mensagens em tela torna o processo interativo, o que é inviável em processos grandes. A geração de logs para arquivos exige codificação adicional. Além disto, nenhuma das duas alternativas acima pode ser facilmente desligada quando o código vai para produção. Normalmente é necessário alterar todos os programas e remover as informações de log.

O OpenEdge dispõe de um gerenciador de logs que pode ser utilizado por programadores 4GL / ABL para geração de logs em suas aplicações. Seguem algumas vantagens em utilizar este recurso:

- simples de utilizar no programa;
- gera logs no mesmo arquivo que a sessão client Progress (a geração é no arquivo clientlog);
- gera logs no mesmo formato utilizado pelo Progress, facilitando o uso de ferramentas de análise de logs;
a geração dos logs pode ser habilitada / desabilitada facilmente através de parâmetros;
- funciona de forma igual com client gráfico, caracter, AppServer e Webspeed.

Para acessar o gerenciador de logs o Progress disponibiliza o system handle LOG-MANAGER. Para gerar um log a partir da aplicação, basta invocar o método WRITE-MESSAGE():

LOG-MANAGER:WRITE-MESSAGE("mensagem de log") NO-ERROR.

O código acima gera a seguinte linha no arquivo clientlog. Para a geração do log ocorrer, é necessário que a sessão esteja executando com algum arquivo de log configurado (parâmetro –clientlog) e o nível de log (parâmetro –logginglevel) seja igual ou superior a 1.

[09/03/17@17:14:26.589-0300] P-002144 T-003940 1 4GL APPL mensagem de log

É possível gerar quantidade diferentes de mensagens de acordo com o nível de log da sessão, conforme demonstrado no código abaixo:

LOG-MANAGER:WRITE-MESSAGE("logging-level >= 1") NO-ERROR.
IF LOG-MANAGER:LOGGING-LEVEL >=2 THEN
LOG-MANAGER:WRITE-MESSAGE("logging-level >= 2") NO-ERROR.
IF LOG-MANAGER:LOGGING-LEVEL >=3 THEN
LOG-MANAGER:WRITE-MESSAGE("logging-level >= 3") NO-ERROR.
IF LOG-MANAGER:LOGGING-LEVEL >=4 THEN
LOG-MANAGER:WRITE-MESSAGE("logging-level >= 4") NO-ERROR.

Ao executar este código com –logginglevel 2, as seguintes linhas são geradas no arquivo de log:

[09/03/17@17:22:11.102-0300] P-003780 T-002836 1 4GL APPL logging-level >= 1
[09/03/17@17:22:11.102-0300] P-003780 T-002836 1 4GL APPL logging-level >= 2

Por padrão, as mensagens sempre são geradas com o subsistema APPL. É possível informar um nome de subsistema (até 10 caracteres) passando um parâmetro adicional ao método WRITE-MESSAGE():

LOG-MANAGER:WRITE-MESSAGE("Mensagem com susbsistema padrão") NO-ERROR.
LOG-MANAGER:WRITE-MESSAGE("Mensagem com susbsistema TRACE", "TRACE") NO-ERROR.

Estas duas linhas de código, quando executadas, geram a saída no arquivo de log:

[09/03/18@09:38:29.763-0300] P-002208 T-002540 1 4GL APPL Mensagem com susbsistema padrão
[09/03/18@09:38:29.763-0300] P-002208 T-002540 1 4GL TRACE Mensagem com susbsistema TRACE

Mais detalhes e exemplos sobre o gerenciador de logs do OpenEdge podem ser encontrados no manual OpenEdge Development: Debugging and Troubleshooting.

https://documentation.progress.com/output/OpenEdge102b/pdfs/dvdbg/dvdbg.pdf

Autor: Marcos Kirchner