Perubahan Tahap Log Masa Jalan menggunakan Golang & GoFr

PHPz
Lepaskan: 2024-07-22 20:56:53
asal
803 orang telah melayarinya

Dalam artikel ini, saya akan berkongsi bagaimana anda boleh menukar tahap log aplikasi anda tanpa memulakan semula aplikasi anda.

pengenalan

Tahap log biasanya dianggap mengikut urutan kepentingan: hidupkan tahap "tidak penting" dalam pembangunan (notis, nyahpepijat dan seumpamanya), tetapi dayakan hanya tahap "paling penting" (amaran, ralat, dll.) dalam pengeluaran, di mana sumber seperti masa CPU dan ruang cakera adalah berharga.

Tetapi bagaimana jika aplikasi anda berjalan pada tahap ERROR dan anda mula menghadapi banyak isu, tetapi anda tidak dapat memikirkannya daripada log tahap ERROR, menukar tahap log dengan menggunakan semula aplikasi akan mengambil banyak masa dan sumber.

Selain itu, menjalankan aplikasi anda sama ada pada tahap INFO atau DEBUG dalam pengeluaran akan menjana sejumlah besar log yang boleh mengatasi sistem pembalakan, yang membawa kepada peningkatan operasi I/O dan penggunaan sumber.

Untuk menyelamatkan kami daripada isu ini, GoFr - Rangka Kerja Ultimate Golang menyediakan cara selamat untuk menukar tahap log tanpa memulakan semula aplikasi anda.

Menukar Tahap Log

Untuk menukar tahap log mana-mana aplikasi GoFr memerlukan konfigurasi berikut:

REMOTE_LOG_URL=<URL to user remote log level endpoint> (e.g., https://log-service.com/log-levels?id=1)
Salin selepas log masuk

GoFr mengambil titik akhir yang disediakan setiap 15 saat secara lalai untuk mendapatkan tahap log terkini, selang ini boleh ditambah atau dikurangkan dengan menambah konfigurasi berikut.

REMOTE_LOG_FETCH_INTERVAL=<Interval in seconds> (default: 15)
Salin selepas log masuk

Perkhidmatan Peringkat Log

GoFr memerlukan respons daripada URL dalam format berikut dengan dua medan wajib:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}
Salin selepas log masuk

Mari kita cipta perkhidmatan peringkat log yang akan menyediakan peringkat log kepada aplikasi kami.

Saya akan menggunakan GoFr untuk mencipta perkhidmatan, rujuk dokumentasi untuk mengetahui lebih lanjut.

Kami akan menggunakan MySQL sebagai pangkalan data, untuk menambah MySQL menambah konfigurasi berikut dalam .env fail dalam direktori konfigurasi.

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

Untuk menjalankan bekas docker MySQL jalankan arahan berikut

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

Mari tambah fail main.go dengan migrasi untuk membuat jadual dan kami akan menggunakan ciri AddRESTHandler untuk mendaftarkan laluan.

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()
}
Salin selepas log masuk

Selepas menjalankan Perkhidmatan Log, kami akan melihat log berikut:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Kami mempunyai semua laluan REST didaftarkan.

Untuk Mencipta perkhidmatan hantar permintaan berikut:

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

Untuk Mengemas kini peringkat log hantar permintaan berikut:

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

Untuk Mendapatkan tahap log hantar permintaan berikut:

curl --location 'localhost:8000/level/1'
Salin selepas log masuk

URL yang sama akan digunakan dalam konfigurasi aplikasi kami yang tahap lognya perlu ditukar dari jauh.

KESIMPULAN

Dengan menggunakan ciri perubahan Tahap Log jauh GoFr, anda akan mendapat faedah seperti:

  • Pelarasan Tanpa Usaha:
    Ubah suai tahap log pada bila-bila masa tanpa memulakan semula aplikasi. Ini amat membantu semasa menyelesaikan masalah.

  • Keterlihatan Dipertingkat:
    Beralih ke tahap log yang lebih terperinci (mis., DEBUG) dengan mudah untuk mendapatkan cerapan yang lebih mendalam tentang isu tertentu, kemudian beralih semula ke tahap yang kurang terperinci (mis., INFO) untuk operasi biasa.

  • Peningkatan Prestasi:
    Menjana sejumlah besar log boleh mengatasi sistem pembalakan, membawa kepada peningkatan operasi I/O dan penggunaan sumber, menukar kepada Aras Amaran atau Ralat mengurangkan bilangan log, dan meningkatkan prestasi, dan MENGURANGKAN KOS AWAN.

Sokong GoFr dengan memberikan ⭐bintang: https://github.com/gofr-dev/gofr

Selain itu, anda mempunyai akses kepada titik akhir awam percuma untuk mengeksport dan melihat jejak aplikasi anda @ tracer.gofr.dev. 
Untuk mendayakannya, tambahkan konfigurasi berikut dalam fail .env anda

TRACE_EXPORTER=gofr
Salin selepas log masuk

Faedah Lain:
Jika anda menyumbang kepada GOFR sama ada dalam pembangunan atau penulisan artikel. Anda boleh mendapatkan swag(baju-T, Pelekat) percuma dengan mengisi borang yang dibentangkan pada GitHub mereka Readme (di bahagian bawah).

Atas ialah kandungan terperinci Perubahan Tahap Log Masa Jalan menggunakan Golang & GoFr. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan