"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Alteração do nível de registro do tempo de execução usando Golang e GoFr

Alteração do nível de registro do tempo de execução usando Golang e GoFr

Publicado em 30/07/2024
Navegar:708

Neste artigo, compartilharei como você pode alterar o nível de log do seu aplicativo sem reiniciá-lo.

Introdução

Os níveis de log são geralmente considerados em ordem de importância: ative os níveis "sem importância" no desenvolvimento (aviso, depuração e similares), mas ative apenas os níveis "mais importantes" (aviso, erro, etc.) em produção, onde recursos como tempo de CPU e espaço em disco são preciosos.

Mas e se seu aplicativo estiver sendo executado no nível de ERRO e você começar a enfrentar muitos problemas, mas não conseguir descobrir isso a partir dos logs de nível de ERRO, alterar o nível de log por meio da reimplantação do aplicativo consumirá muito tempo e recursos.

Além disso, executar seu aplicativo no nível INFO ou DEBUG na produção gerará um grande número de logs que podem sobrecarregar o sistema de registro, levando a um aumento nas operações de E/S e no consumo de recursos.

Para nos resgatar desses problemas, GoFr - The Ultimate Golang Framework fornece uma maneira segura de alterar o nível de log sem reiniciar seu aplicativo.

Alteração do nível de registro

Para alterar o nível de log, qualquer aplicativo GoFr requer a seguinte configuração:

REMOTE_LOG_URL= (e.g., https://log-service.com/log-levels?id=1)

GoFr busca o endpoint fornecido a cada 15 segundos por padrão para obter o nível de log mais recente. Esse intervalo pode ser aumentado ou diminuído adicionando a seguinte configuração.

REMOTE_LOG_FETCH_INTERVAL= (default: 15)

Serviço em nível de registro

GoFr requer a resposta da URL no seguinte formato com dois campos obrigatórios:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}

Vamos criar o serviço de nível de log que fornecerá o nível de log para nosso aplicativo.

Usarei GoFr para criar o serviço, consulte a documentação para saber mais.

Usaremos o MySQL como banco de dados. Para adicionar o MySQL, adicione as seguintes configurações no arquivo .env no diretório configs.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql

Para executar o contêiner docker MySQL, execute o seguinte comando

docker run --name gofr-logger -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=log-level -p 2001:3306 -d mysql:8.0.30

Vamos adicionar o arquivo main.go com as migrações para criar a tabela e usaremos o recurso AddRESTHandler para registrar a rota.

main.go

package main

import (
 "gofr.dev/pkg/gofr"
 "gofr.dev/pkg/gofr/migration"
)

const createTable = `CREATE TABLE level (
    id INT PRIMARY KEY,
    service_name VARCHAR(255) NOT NULL,
    log_level VARCHAR(50) NOT NULL
);
`

func createTableLevel() migration.Migrate {
 return migration.Migrate{
  UP: func(d migration.Datasource) error {
   _, err := d.SQL.Exec(createTable)
   if err != nil {
    return err
   }

   return nil
  },
 }
}

type Level struct {
 ID          int    `json:"id"`
 ServiceName string `json:"serviceName"`
 LogLevel    string `json:"logLevel"`
}

func (u *Level) RestPath() string {
 return "level"
}

func main() {
 app := gofr.New()

 app.Migrate(map[int64]migration.Migrate{1: createTableLevel()})

 err := app.AddRESTHandlers(&Level{})
 if err != nil {
  app.Logger().Fatalf("Failed to register routes for level struct: %v", err)
 }

 app.Run()
}

Após executar o Log Service, veremos os seguintes logs:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Temos todas as rotas REST cadastradas.

Para criar um serviço envie a seguinte solicitação:

curl --location 'localhost:8000/level' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"INFO",
    "serviceName":"gofr-app"
}'

Para atualizar o nível de log envie a seguinte solicitação:

curl --location --request PUT 'localhost:8000/level/1' \
--header 'Content-Type: application/json' \
--data '{
    "id":1,
    "logLevel":"DEBUG",
    "serviceName":"gofr-app"
}'

Para obter o nível de log, envie a seguinte solicitação:

curl --location 'localhost:8000/level/1'

A mesma URL será usada nas configurações da nossa aplicação cujo nível de log deve ser alterado remotamente.

CONCLUSÃO

Ao usar o recurso de alteração remota do nível de registro do GoFr, você obterá benefícios como:

  • Ajustes fáceis:
    Modifique o nível de log a qualquer momento sem reiniciar o aplicativo. Isso é especialmente útil durante a solução de problemas.

  • Visibilidade aprimorada:
    Mude facilmente para um nível de registro mais detalhado (por exemplo, DEBUG) para obter insights mais profundos sobre problemas específicos e, em seguida, volte para um nível menos detalhado (por exemplo, INFO) para operação regular.

  • Performance melhorada:
    A geração de um grande número de logs pode sobrecarregar o sistema de log, levando ao aumento das operações de E/S e do consumo de recursos. A mudança para o nível de aviso ou erro reduz o número de logs e melhora o desempenho, além de REDUZIR O CUSTO DA NUVEM.

Apoie GoFr dando uma ⭐estrela: https://github.com/gofr-dev/gofr

Além disso, você tem acesso ao endpoint público gratuito para exportar e visualizar os rastreamentos do seu aplicativo @ tracer.gofr.dev. 
Para habilitá-lo, adicione a seguinte configuração em seu arquivo .env

TRACE_EXPORTER=gofr

Outros benefícios:
Se você contribui para o GOFR no desenvolvimento ou na redação de artigos. Você pode obter brindes(camisetas, adesivos) gratuitamente preenchendo o formulário apresentado no GitHub Readme (na parte inferior).

Declaração de lançamento Este artigo foi reproduzido em: https://dev.to/aryanmehrotra/remote-runtime-log-level-change-using-golang-gofr-54d8?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3