В этой статье я расскажу, как можно изменить уровень журнала вашего приложения без перезапуска приложения.
Уровни журнала обычно располагаются в порядке важности: включите «неважные» уровни в разработке (уведомление, отладка и т.п.), но включите только «самые важные» уровни (предупреждение, ошибка и т. д.) в производство, где ценны такие ресурсы, как процессорное время и дисковое пространство.
Но что, если ваше приложение работает на уровне ОШИБКИ и вы начинаете сталкиваться со многими проблемами, но вы не можете выяснить это из журналов уровня ОШИБКИ, изменение уровня журнала путем повторного развертывания приложения займет много времени и ресурсов.
]Более того, запуск вашего приложения на уровне 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() }
После запуска службы журналов мы увидим следующие журналы:
У нас зарегистрированы все маршруты 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 (внизу).
Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.
Copyright© 2022 湘ICP备2022001581号-3