Criando log estruturados com Seq e Serilog

8 nov

Fala Galera,

Hoje esterei falando sobre Logs.  Logar a execução de um aplicação é uma parte importante dentro do processo de desenvolvimento de software porém criar um Log que realmente nos ajude, esse sim é complicado. Quem nunca pegou um Log de 1 GB ou mais tendo que achar uma informação para tentar desvendar um erro. Realmente quando estamos neste cenário é porque o sistema saiu do ar ou tem um cliente muito aborrecido querendo uma rápida solução.

Quando criamos um Log, sempre achamos que o que escrevemos nele vai nos ajudar, mas nem sempre é assim. O principal problema de ser criar um Log é escrever as informações necessárias e claro pesquisar essas informações dentro de um arquivo de Log que tende a ficar grande a medida que sua aplicação é usada.

Assim como o processo de desenvolvimento de software muda e muda muito rápido eis que surge a criação de Log Estruturados e Indexados. Esse tipo de Log é fácil de ser pesquisado e ainda podemos criar qualquer estrutura indexada dentro dele como por exemplo um JSON.

Para esse tipo Log Estruturado existe a solução chamada Seq, que é um solução Open Source para gerenciamento desse tipo de Log. Ele coleta os dados do Log sobre uma rica API REST e nele podemos fazer pesquisas como se fizermos uma simples consulta SQL.

O Seq pode ser integrado com vários tipos de Framework de Log, neste exemplo estarei usando o Serilog.

Instalando o Seq Server

Para utilizar o Seq devemos fazer download do instalador do através deste link. A instalação do Seq é bem simples e pode ser feita através do Wizard dele. Ele irá coletar todas as informações necessárias e adicionar o serviço do Seq Server no Windows.

Ao final da instalação você deve ser capaz de visualizar uma tela igual a da imagem abaixo:

seq1

Estamos com Seq pronto para ação. Vamos criar nossa aplicação de exemplo.

Utilizando o Seq com Serilog

Com Seq instalado devemos agora escrever nossas informações de Log utilizando o Framework Serilog.

Crie um Console Application assim podemos demonstrar de forma rápida o seu uso.

Com o Console Application criado vamos adicionar os pacotes necessários para escrever no Seq.seq2

Após adicionar o Serilog, vamos adicionar o Client do Serilog para o Seq conforme imagem abaixo:

seq3

Agora com todos os pacotes instalados, vamos fazer a configuração do Serilog

class Program
{
    static void Main(string[] args)
    {
         Log.Logger = new LoggerConfiguration()
            .WriteTo.Seq("http://localhost:5341")
            .CreateLogger();

    }
}

No código acima, estamos configurando o Serilog para fazer escritas no Seq e ainda estamos criando a referencia para o Log.

Agora estamos prontos para fazer as escritas no Seq conforme código abaixo:

static void Main(string[] args)
       {
           ILogger log = new LoggerConfiguration()
               .WriteTo.Seq("http://localhost:5341")
               .CreateLogger();

           for (int i = 0; i < 1500; i++)
           {
               var request = new
               {
                   TransactionId = Guid.NewGuid(),
                   Message = "OK",
                   Response = "Usuário salvo com sucesso"
               };

               log.Information("New Request TransactionId:{TransactionId}: {@request}", request.TransactionId, request);
           }
           Console.Read();
       }

Ao executar o código, ele estará gravando no Seq a informação estruturada assim podemos fazer buscas através de sua interface conforme figura abaixo

seq4

 

Neste post apresentei o básico do Seq com Serilog, existem uma infinidade de possibilidades que podemos fazer com os dois. Como vimos criar Logs são fáceis o mais difícil é gravar a informação que realmente vai ter ajudar em um determinado problema.

Para saber mais sobre o Seq, clique aqui

Para saber mais sobre o Serilog, clique aqui

O código fonte deste exemplo se encontra no meu Github através deste link

Abs e até a próxima.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *