«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Изменение уровня журнала времени выполнения с помощью Golang и GoFr

Изменение уровня журнала времени выполнения с помощью Golang и GoFr

Опубликовано 30 июля 2024 г.
Просматривать:550

В этой статье я расскажу, как можно изменить уровень журнала вашего приложения без перезапуска приложения.

Введение

Уровни журнала обычно располагаются в порядке важности: включите «неважные» уровни в разработке (уведомление, отладка и т.п.), но включите только «самые важные» уровни (предупреждение, ошибка и т. д.) в производство, где ценны такие ресурсы, как процессорное время и дисковое пространство.

Но что, если ваше приложение работает на уровне ОШИБКИ и вы начинаете сталкиваться со многими проблемами, но вы не можете выяснить это из журналов уровня ОШИБКИ, изменение уровня журнала путем повторного развертывания приложения займет много времени и ресурсов.

]

Более того, запуск вашего приложения на уровне INFO или DEBUG в рабочей среде приведет к созданию большого количества журналов, что может перегрузить систему журналирования, что приведет к увеличению операций ввода-вывода и потреблению ресурсов.

Чтобы спасти нас от этих проблем, GoFr - The Ultimate Golang Framework предоставляет безопасный способ изменения уровня журнала без перезапуска приложения.

Изменение уровня журнала

Для изменения уровня журнала любое приложение GoFr требует следующей конфигурации:

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

GoFr по умолчанию извлекает предоставленную конечную точку каждые 15 секунд, чтобы получить последний уровень журнала. Этот интервал можно увеличить или уменьшить, добавив следующую конфигурацию.

REMOTE_LOG_FETCH_INTERVAL= (default: 15)

Служба уровня журнала

GoFr требует ответа от URL-адреса в следующем формате с двумя обязательными полями:

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

Давайте создадим службу уровня журнала, которая будет обеспечивать уровень журнала для нашего приложения.

Для создания службы я буду использовать GoFr. Дополнительную информацию можно найти в документации.

Мы будем использовать MySQL в качестве базы данных. Чтобы добавить MySQL, добавьте следующие конфигурации в файл .env в каталоге конфигураций.

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

Чтобы запустить Docker-контейнер MySQL, выполните следующую команду

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

Давайте добавим файл main.go с миграциями для создания таблицы и воспользуемся функцией AddRESTHandler для регистрации маршрута.

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()
}

После запуска службы журналов мы увидим следующие журналы:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

У нас зарегистрированы все маршруты REST.

Чтобы создать услугу, отправьте следующий запрос:

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

Чтобы обновить уровень журнала, отправьте следующий запрос:

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

Чтобы получить уровень журнала, отправьте следующий запрос:

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

Тот же URL-адрес будет использоваться в конфигурациях нашего приложения, уровень журнала которого необходимо изменить удаленно.

ЗАКЛЮЧЕНИЕ

Используя функцию удаленного изменения уровня журнала GoFr, вы получите такие преимущества, как:

  • Легкая настройка:
    Измените уровень журнала в любое время, не перезапуская приложение. Это особенно полезно при устранении неполадок.

  • Повышенная видимость:
    Легко переключайтесь на более подробный уровень журнала (например, DEBUG), чтобы получить более глубокое понимание конкретных проблем, а затем переключайтесь обратно на менее подробный уровень (например, INFO) для регулярной работы.

  • Улучшенная производительность:
    Создание большого количества журналов может перегрузить систему журналов, что приведет к увеличению операций ввода-вывода и потреблению ресурсов. Переход на уровень предупреждения или ошибки уменьшает количество журналов, повышает производительность и СНИЖЕНИЕ ОБЛАЧНЫХ СТОИМОСТЕЙ.

Поддержите GoFr, поставив ⭐звезду: https://github.com/gofr-dev/gofr

Более того, у вас есть доступ к бесплатной общедоступной конечной точке для экспорта и просмотра трассировок вашего приложения @tracer.gofr.dev. 
Чтобы включить его, добавьте следующую конфигурацию в свой файл .env

TRACE_EXPORTER=gofr

Другие преимущества:
Если вы вносите свой вклад в GOFR либо в разработке, либо в написании статей. Вы можете получить бесплатные подарки (футболки, наклейки), заполнив форму, представленную на их GitHub Readme (внизу).

Заявление о выпуске Эта статья воспроизведена по адресу: https://dev.to/aryanmehrotra/remote-runtime-log-level-change-using-golang-gofr-54d8?1. Если есть какие-либо нарушения, свяжитесь с [email protected], чтобы удалить это
Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3