Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

1.1 O TRACKLOG REGISTRA VARIOS NIVEIS(LEVEL) DE LOG

OrdemNível(Level)Identificado no arquivoUso
0Verbose[VRB]Verbose é o nível mais ruidoso, raramente (ou nunca) habilitado para um aplicativo de produção.
1Debug[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.
2Information[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.
3Warning[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.
4Error[ERR]Quando a funcionalidade não está disponível ou as expectativas são quebradas, um evento de Erro é usado.
5Fatal[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 e 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 templeteExemplo de dados logadoDescrição
{SourceContext}RM.Lib.Monitoring.Tracklog.Test.LogUnitTestContexto onde encontra-se o log, geralmente o namespace da classe que esta usando o TrackLog.
{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} 2022-08-30 17:44:44.870 -03:00Data e hora do evento.
{Legacy} [LGC]Registros do sistema antigo de log são identificado com a tag [LGC]
[{Level:u3}] [INF]Level do evento.
{Tenant}shared-environmentIdentifica o Tenant do evento, esse item é acoplado a mensagem.
{Message:lj} Information log testMensagem 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 numero da linha da e método que o chamou.
[{Module}, {Category}, {Funcionality}] [RMLib, SmartClient, Configuracao]Modulo categoria e funcionalidade do sistema onde o evento ocorreu.
{NewLine}{Exception}NullReferenceException: Write Error Log Exception ---> System.Exception: Should_Write_Error_LogWarning, Error e Fatal é registrado e uma nova linha com a exceção

02. COMO CONFIGURAR

...

Tracklog é configurado através de um arquivo json: appsettings.log.json que deve ficar dentro da pasta Bin do sistema, 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.

...

*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

appsettings.log.json


Bloco de código
languagejs
themeRDark
linenumberstrue
{
  "Serilog": {
    "Using": ["Serilog", "Serilog.Enrichers.Environment", "Serilog.Enrichers.Process", "Serilog.Settings.Configuration", "Serilog.Sinks.Seq", "Serilog.Expressions", "RM.Lib.Monitoring.Tracklog"],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId", "WithEnvironmentUserName", "WithEnvironmentName"],
    "MinimumLevel": "Verbose",
	/*"Filter": [
      {
        "Name": "ByExcluding",
        "Args": {
          "expression": "Tenant = 'APP1'"
    "Enrich": [ "FromLogContext",  }
   "WithMachineName", "WithProcessId", "WithThreadId", "WithEnvironmentUserName", "WithEnvironmentName"],
   }
    ],*/"MinimumLevel": "Verbose",
    "WriteTo": [
      {
        "Name": "Seq",
        "Args": { 
					"serverUrl": "http://localhost:5341" 
				}
      },
	  {
		  "Name": "Console",
		  "Args": {
			"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
			"outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss.fff zzz} {Legacy} [{Level:u3}] {Message:lj} {EnvironmentUserName} {EnvironmentName}- <{ThreadId}>{NewLine}{ExceptionDetails}"
		  }
	  },
      {
        "Name": "Async",
        "Args": {
          "configure": [
            {
              "Name": "MapToFile",
              "Args": {
                "rollOnFileSizeLimit": true,
                "fileSizeLimitBytes": 100000000000,
                "retainedFileCountLimit": 31,
				"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}"
              }
            }
          ]
        }
      }
    ]
  }
}



2.2 ARQUIVO DE CONFIGURAÇÃO EXPURGO DE ARQUIVOS

Configurando o expurgo de logs

Exemplo excluir arquivos com mais de 7 dias.

Bloco de código
languagejs
themeRDark
linenumberstrue
{
  "Serilog": {
    "Using": ["Serilog", "Serilog.Enrichers.Environment", "Serilog.Enrichers.Process", "Serilog.Settings.Configuration", "Serilog.Sinks.Seq", "Serilog.Expressions", "RM.Lib.Monitoring.Tracklog"],
    "Enrich": [ "FromLogContext", "WithMachineName", "WithProcessId", "WithThreadId", "WithEnvironmentUserName", "WithEnvironmentName"],
    "WriteTo": [
       {
		  "Name": "Async",
		  "Args": {
			"configure": [
			  {
				"Name": "MapToFile",
				"Args": {
					"rollOnFileSizeLimit": "true", //Habilita um tamanho limite para o arquivo de log
					"fileSizeLimitBytes": "52428800", // Especifica o tamanho de cada arquivo de log
					"rollingInterval": "Day", //Criar um novo arquivo a cada dia
					"retainedFileCountLimit": "100", //Limite máximo de arquivos se ultrapassar esse valor o sistema exclui os mais antigos
					"retainedFileTimeLimit": "7.00:00:00", //Exclui arquivos com mais de 7 dias 
				}
			  }
			]
		  }
		}
    ]
  }
}

...