CONTEÚDO
01. VISÃO GERAL
O RM TRACKLOG é o motor de logs do RM responsável por disponibilizar informações sobre o sistema através de arquivos de texto contendo data e hora do evento e mensagens criadas de forma automática.
Portanto, com o TRACKLOG, os logs são capazes de mostrar o que, quando e onde aconteceu um evento, além de indicar quem deu início a ele.
1.1 O TRACKLOG REGISTRA VÁRIOS NÍVEIS (LEVEL) DE LOG
Ordem | Nível (Level) | Identificado no arquivo | Uso |
---|---|---|---|
0 | Verbose | [VRB] | Verbose é o nível mais ruidoso, raramente (ou nunca) habilitado para um aplicativo de produção. |
1 | Debug | [DBG] | Debug é usado para eventos internos do sistema que não são necessariamente observáveis de fora, mas são úteis para determinar como algo aconteceu. |
2 | Information | [INF] | Os eventos de informação descrevem coisas que acontecem no sistema que correspondem às suas responsabilidades e funções. Geralmente estas são as ações observáveis que o sistema pode realizar. |
3 | Warning | [WRN] | Quando o serviço está degradado, em perigo ou pode estar se comportando fora de seus parâmetros esperados, os eventos de nível de aviso são usados. |
4 | Error | [ERR] | Quando a funcionalidade não está disponível ou as expectativas são quebradas, um evento de Erro é usado. |
5 | Fatal | [FTL] | O nível mais crítico, os eventos fatais exigem atenção imediata. |
1.2 INFORMAÇÕES CONTIDAS NO ARQUIVO DE LOG
O arquivo de log é escrito conforme um template padrão (outputTemplate):
"{SourceContext}{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {Legacy} [{Level:u3}] {Message:lj} ({EnvironmentName}|{EnvironmentUserName}) <{ThreadId}:{ThreadName}>[{ProcessId}:{ProcessName}] [{CallerFilePath} - ({CallerLineNumber}) - {CallerMemberName}] [{Module}, {Category}, {Funcionality}] {NewLine}{Exception}"
Propriedades do templete | Exemplo de dados logado | Descrição |
---|---|---|
{SourceContext} | RM.Lib.Monitoring.Tracklog.Test.LogUnitTest | Contexto onde o log se encontra. Geralmente o namespace da classe que está usando o TrackLog. |
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} | 2022-08-30 17:44:44.870 -03:00 | Data e hora do evento. |
{Legacy} | [LGC] | Registros do sistema antigo de log são identificado com a tag [LGC] |
[{Level:u3}] | [INF] | Nível (level) do evento. |
{Tenant} | shared-environment | Identifica o Tenant do evento. Esse item é acoplado à mensagem. |
{Message:lj} | Information log test | Mensagem do evento. |
({EnvironmentName}|{EnvironmentUserName}) | (Production|BH01\carlos.almeida) | Nome do ambiente e do usuário. |
<{ThreadId}:{ThreadName}> | <13:Host> | ThreadId e ThreadName do evento. |
[{ProcessId}:{ProcessName}] | [36956:Host.exe] | ProcessId e ProcessName do evento. |
[{CallerFilePath} - ({CallerLineNumber}) - {CallerMemberName}] | [Lib\RM.Lib.Monitoring.Tracklog.TesteUnitario\LogUnitTest.cs - (114) - Should_Write_Info_Log] | Arquivo de onde foi registrado o evento de log com o número da linha e o método que o chamou. |
[{Module}, {Category}, {Funcionality}] | [RMLib, SmartClient, Configuracao] | Módulo, categoria e funcionalidade do sistema onde o evento ocorreu. |
{NewLine}{Exception} | NullReferenceException: Write Error Log Exception ---> System.Exception: Should_Write_Error_Log | Warning, Error e Fatal é registrado e uma nova linha com a exceção |
02. COMO CONFIGURAR
O TRACKLOG é configurado através do arquivo JSON appsettings.log.json, o qual deve ficar no diretório raiz do sistema RM. Caso o arquivo não seja encontrado, o sistema assume as configurações padrões.
O conteúdo do arquivo de configuração é divido em algumas sessões, conforme detalhado a seguir.
2.1 SESSÕES DO ARQUIVO DE CONFIGURAÇÃO
A a sessão principal do arquivo de configuração é a "Serilog", onde é informado como o sistema deve escrever o arquivo de log e os recursos que serão utilizados:
Sessão principal Serilog
Sessão Principal | Subsesões | Pode ser alterado? | |
---|---|---|---|
Serilog | |||
Using | Não | Recursos usados pelo Serilog | |
Enrich | Não | Informações usadas para enriquecer os dados do log. | |
MinimumLevel | Sim | Nível mínimo que deve ser registrado. 0-Verbose, 1-Debug, 2 - Information, 3-Warning, 4-Error, 5-Fatal | |
Filter | Sim | Usa expressão para filtrar eventos que passam pelo pipeline Serilog - Opções de Name: ByExcluding ou ByIncludingOnly | |
WriteTo | Somente os argumentos na subseção Args da MapToFile | Define como e onde o log deve ser escrito e salvo. |
Sessão que configura a escrita no arquivo de log
"WriteTo": [
{
"Name": "Async",
"Args": {
"configure": [
{
"Name": "MapToFile",
"Args": {
Propriedade | Descrição | ||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
enable | A propriedade "enable" tem como objetivo desabilitar o recurso de escrita de log em arquivo. Por padrão, o valor dessa propriedade é definido como "false", indicando que o recurso está desativado.
| ||||||||||||||
path | Caminho onde o arquivo de log vai ser salvo
Formato: Os diretórios devem ser separados por duas barras invertidas \\ ou uma barra normal / "path": "C:\\TOTVS\\RM\\Logs\\" ✔️ "path": "C:/TOTVS/RM/Logs/" ✔️ "path": "C:\TOTVS\RM\Logs\" ❌ | ||||||||||||||
restrictedToMinimumLevel | Somente mensagens de log deste nível ou acima deste nível serão enviadas para este coletor.
| ||||||||||||||
formatProvider | Fornece informações de formatação específicas da cultura ou null. Padrão: Null | ||||||||||||||
outputTemplate | Um modelo de mensagem descrevendo o formato usado para gravar no coletor.
| ||||||||||||||
fileSizeLimitBytes | O tamanho máximo aproximado, em bytes, para o qual um arquivo de log poderá crescer. Para crescimento irrestrito, passe null.
| ||||||||||||||
buffered | Indica se a liberação para o arquivo de saída pode ser armazenada em buffer ou não.
| ||||||||||||||
shared | Permitir que o arquivo de log seja compartilhado por vários processos.
| ||||||||||||||
flushToDiskInterval | Se fornecido, uma limpeza completa do disco será executada periodicamente no intervalo especificado. Exemplo: flushToDiskInterval: "2.00:00:00"
| ||||||||||||||
rollingInterval | O intervalo no qual o registro será transferido para um novo arquivo.
| ||||||||||||||
rollOnFileSizeLimit | Se True, um novo arquivo será criado quando o limite de tamanho do arquivo for atingido.
| ||||||||||||||
retainedFileCountLimit | O número máximo de arquivos de log que serão retidos, incluindo o arquivo de log atual. Para retenção ilimitada, passe null.
| ||||||||||||||
encoding | Codificação de caracteres usada para escrever o arquivo de texto. Opções: UTF8, UTF7, UTF32, Unicode, BigEndianUnicode, ASCII, Default
| ||||||||||||||
retainedFileTimeLimit | O tempo máximo após o término de um intervalo em que um arquivo de log contínuo será retido. Exemplo: retainedFileTimeLimit: "6.14:32:15"
|
Sessão que configura a escrita do log no console
"WriteTo": [
{
"Name": "Console",
"Args": {
Propriedade | Descrição |
---|---|
theme | Define um tema para ser usado ao escrever o log no console |
outputTemplate | Um modelo de mensagem descrevendo o formato usado para gravar no console. Padrão: {Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {Legacy} [{Level:u3}] {Message:lj} {EnvironmentUserName} {EnvironmentName}- <{ThreadId}>{NewLine}{ExceptionDetails} |
Sessão que configura o envio do log para o sistema de monitoramento Seq
"WriteTo": [
{
"Name": "Seq",
"Args": {
Propriedade | Descrição |
---|---|
serverUrl | Define a url do servidor Seq. |
*O Seq é um servidor de pesquisa e análise em tempo real para dados de log de aplicativos estruturados.
2.2 ARQUIVO DE CONFIGURAÇÃO PADRÃO
2.3 ARQUIVO DE CONFIGURAÇÃO EXPURGO DE ARQUIVOS
2.4 EXEMPLOS DE CONFIGURAÇÕES
2.4.1 Registrar log somente no console
2.4.2 Registrar log somente no Seq
2.4.3 Registrar log somente no Arquivo, excluindo arquivos antigos a cada 7 após serem criados
2.4.4 Registrar logs somente de erro ou superior no Arquivo, excluindo arquivos antigos a cada 7 dias após serem criados.
2.4.5 Definindo o path para especificar onde os arquivos de logs devem ser salvos.
Lembre-se
Para usar o arquivo após o download, renomeie-o para appsettings.log.json e o coloque dentro do diretório raiz do sistema RM.