Logs da Intranet

De DTI Wiki

Ir para: navegação, pesquisa

Tabela de conteúdo

Introdução

Este recurso foi desenvolvido na Intranet para quando é necessário registrar informações de logs internos que ocorrem nas aplicações e sistemas da Intranet, semelhante aos Logs que já existem hoje para a depuração dos programas PL/SQL do Oracle.


Tipos de Logs (Níveis de Severidades)

Para definir os tipos de logs, ou níveis de severidades de logs, nos embasamos de acordo com a especificação da RFC 5424, podendo ser, em ordem crescente, do menos severo para o mais severo:


A Classe Logger PHP

Com o objetivo de facilitar o registro de logs internos da dos sistemas aplicações da Intranet da UPF, foi criado uma classe PHP para registrar tais informações, ela se encontra em /lib/logger/logger.class.php.


Armazenamento e Consulta no Banco de Dados

O armazenamento das informações registradas pelo logger são feitos na tabela intranet.logmensagem. Porém para consultar as informações, aconselha-se ser utilizado a view intranet.viw_logmensagens para facilitar a pesquisa.

Atualmente existe um job no Oracle com agendamento para ser executado todas as madrugadas para excluir os dados que passaram das suas datas de validades para ficarem armazenados. Atualmente por padrão esta validade é de 8 dias corridos após o seu armazenamento.

SELECT velm.idlogmensagem,
       velm.sequenciaexecucao,
       velm.datahorario,
       velm.ambiente,
       velm.descambiente,
       velm.urlexecutada,
       velm.caminhoarquivo,
       velm.linha,
       velm.codusuario,
       velm.matriculausuario,
       velm.tipousuario,
       velm.nomeusuario,
       velm.codusuariobecome,
       velm.matriculausuariobecome,
       velm.tipousuariobecome,
       velm.nomeusuariobecome,
       velm.agrupadorexecucao,
       velm.tipo,
       velm.desctipo,
       velm.iniciomensagem,
       velm.mensagem,
       velm.ip,
       velm.qtdediasarmazenar
FROM   intranet.viw_logmensagens velm;


Utilização do Logger Dentro de Páginas Intranet Com Instância da UpfTpl ($app)

Para a utilização do Logger dentro de páginas da intranet que tenham uma instância da UplTpl, normalmente nomeada de $app, não é necessário instanciar a classe do Logger, pois existem métodos na UpfTpl para trabalhar com esta classe de forma mais fácil, evitando de ter que configurá-la ao instanciar.


Inicialização do Logger

Para inicializar o Logger através da instância da UpfTpl é muito simples, basta utilizar o seguinte código:

$app->inicializarLogger();

Com isto, este método da classe UpfTpl irá instanciar a classe Logger dentro da UpfTpl e irá inicializar todos os parâmetros iniciais necessários para a utilização da classe Logger.


Definição dos Ambientes que Irão Registrar os Logs no Banco de Dados

Atualmente não existe uma manutenção de dados para agendar (ativar e desativar) os registros de logs colocados no sistema nos ambientes. Desta forma atualmente para ativar ou desativar algum log é necessário colocá-lo ou retirá-lo do código fonte. Porém a ideia é que mais adiante seja criada uma manutenção de dados de agendamento (ativação e desativação) de logs no sistema para cada ambiente independente, possibilitando ativar e desativar o registro dos logs por URL, Tipo de Log, Usuário na Sessão, Arquivo do Código Fonte e etc., sem a necessidade do desenvolvedor retirar os logs do sistema para desativá-los, semelhante como já é feito com os logs do Oracle.

Desta forma, após inicializar o logger na intranet pelo método que já vimos acima, é necessário definir em quais ambientes (Desenvolvimento, Testes e/ou Produção) ele registrará as informações, conforme os exemplos a seguir:

$app->logger->setInserirAmbienteDesenvolvimento(TRUE);
$app->logger->setInserirAmbienteTestes(TRUE);
$app->logger->setInserirAmbienteProducao(TRUE);
//ou
$app->logger->setInserirTodosAmbientes(TRUE);
//ou
$app->logger->setForcarInserir(TRUE);


Registrando logs

Para registrar logs nos códigos fontes PHP, podemos registrar os log através de dois métodos diferentes, resultando em três formas diferentes de utilização. Seguem os exemplos das três possíveis formas de registro de log para cada um dos oito tipos possíves:

//Com o método logMessage(), passando o tipo do log em numeral de 1 a 8 que representa o tipo do log.
$app->logger->logMessage(1, 'Mensagem a ser registrada no log de debug.');
$app->logger->logMessage(2, 'Mensagem a ser registrada no log de informational.');
$app->logger->logMessage(3, 'Mensagem a ser registrada no log de notice.');
$app->logger->logMessage(4, 'Mensagem a ser registrada no log de warning.');
$app->logger->logMessage(5, 'Mensagem a ser registrada no log de error.');
$app->logger->logMessage(6, 'Mensagem a ser registrada no log de critical.');
$app->logger->logMessage(7, 'Mensagem a ser registrada no log de alert.');
$app->logger->logMessage(8, 'Mensagem a ser registrada no log de emergency.');
 
//ou
 
//Com o método logMessage(), passando o tipo do log por constante.
$app->logger->logMessage(Logger::TIPO_DEBUG, 'Mensagem a ser registrada no log de debug.');
$app->logger->logMessage(Logger::TIPO_INFORMATIONAL, 'Mensagem a ser registrada no log de informational.');
$app->logger->logMessage(Logger::TIPO_NOTICE, 'Mensagem a ser registrada no log de notice.');
$app->logger->logMessage(Logger::TIPO_WARNING, 'Mensagem a ser registrada no log de warning.');
$app->logger->logMessage(Logger::TIPO_ERROR, 'Mensagem a ser registrada no log de error.');
$app->logger->logMessage(Logger::TIPO_CRITICAL, 'Mensagem a ser registrada no log de critical.');
$app->logger->logMessage(Logger::TIPO_ALERT, 'Mensagem a ser registrada no log de alert.');
$app->logger->logMessage(Logger::TIPO_EMERGENCY, 'Mensagem a ser registrada no log de emergency.');
 
//ou
 
//Com o método específicos para cada tipo de log:
$app->logger->logMessageDebug('Mensagem a ser registrada no log de debug.');
$app->logger->logMessageInformational('Mensagem a ser registrada no log de informational.');
$app->logger->logMessageNotice('Mensagem a ser registrada no log de notice.');
$app->logger->logMessageWarning('Mensagem a ser registrada no log de warning.');
$app->logger->logMessageError('Mensagem a ser registrada no log de error.');
$app->logger->logMessageCritical('Mensagem a ser registrada no log de critical.');
$app->logger->logMessageAlert('Mensagem a ser registrada no log de alert.');
$app->logger->logMessageEmergency('Mensagem a ser registrada no log de emergency.');


Tipos de Dados Aceitados

Para registro de logs, os métodos aceitam vários tipos de dados, como números (inteiros e decimais), strings, arrays, jsons e etc., como podemos ver nos exemplos abaixo:

//Formatos de números
$app->logger->logMessageDebug(5678);
$app->logger->logMessageDebug(5678.99);
 
//Formato de String
$app->logger->logMessageDebug('Uma mensagem de log em formato de string.');
 
//Formato de Array
$dados = array('Este é o texto de um dos índices do array.',
               'Este é o texto de um outro índice do array.');
$app->logger->logMessageDebug($dados);


Exemplo Prático (Direto ao Ponto)

Abaixo segue um exemplo prático e direto para utilização dos Logs na Intranet:

//Instancia da Classe UpfTpl.
$app = new UpfTpl($orauser, $orapassw, $oradb, "financeiro/cobrancasRegistradas/", "consultaCobrancasrRegistradas.tpl.html", CODAPLICACAO, TRUE);
 
//Inicialização do Logger dentro da UpfTpl.
$app->inicializarLogger();
 
//Definição do(s) ambiente(s) que irão registrar os logs.
$app->logger->setInserirTodosAmbientes(TRUE);
 
//Registro das mensagens de Logs.
$app->logger->logMessage(Logger::TIPO_DEBUG, 'Mensagem a ser registrada no log de debug.');
$app->logger->logMessage(Logger::TIPO_INFORMATIONAL, 'Mensagem a ser registrada no log de informational.');
Ferramentas pessoais
Espaços nominais
Variantes
Ações
Navegação
Ferramentas