Änderung der Laufzeitprotokollebene mit Golang und GoFr

PHPz
Freigeben: 2024-07-22 20:56:53
Original
784 Leute haben es durchsucht

In diesem Artikel werde ich erläutern, wie Sie die Protokollebene Ihrer Anwendung ändern können, ohne Ihre Anwendung neu starten zu müssen.

Einführung

Protokollebenen werden normalerweise in der Reihenfolge ihrer Wichtigkeit betrachtet: Aktivieren Sie „unwichtige“ Ebenen in der Entwicklung (Hinweis, Debug usw.), aktivieren Sie jedoch nur die „wichtigsten“ Ebenen (Warnung, Fehler usw.). Produktion, wo Ressourcen wie CPU-Zeit und Speicherplatz kostbar sind.

Aber was ist, wenn Ihre Anwendung auf der Ebene „FEHLER“ ausgeführt wird und Sie mit vielen Problemen konfrontiert werden, Sie diese aber anhand der Protokolle auf Fehlerebene nicht herausfinden können? Das Ändern der Protokollebene durch eine erneute Bereitstellung der Anwendung wird viel Zeit und Ressourcen in Anspruch nehmen.

Darüber hinaus wird die Ausführung Ihrer Anwendung auf der INFO- oder DEBUG-Ebene in der Produktion eine große Anzahl von Protokollen generieren, die das Protokollierungssystem überlasten können, was zu erhöhten E/A-Vorgängen und Ressourcenverbrauch führt.

Um uns vor diesen Problemen zu bewahren, bietet GoFr - The Ultimate Golang Framework eine sichere Möglichkeit, die Protokollebene zu ändern, ohne Ihre Anwendung neu zu starten.

Protokollebene ändern

Um die Protokollebene zu ändern, erfordert jede GoFr-Anwendung die folgende Konfiguration:

REMOTE_LOG_URL=<URL to user remote log level endpoint> (e.g., https://log-service.com/log-levels?id=1)
Nach dem Login kopieren

GoFr ruft standardmäßig alle 15 Sekunden den bereitgestellten Endpunkt ab, um die neueste Protokollebene zu erhalten. Dieses Intervall kann durch Hinzufügen der folgenden Konfiguration erhöht oder verringert werden.

REMOTE_LOG_FETCH_INTERVAL=<Interval in seconds> (default: 15)
Nach dem Login kopieren

Log-Level-Dienst

GoFr benötigt die Antwort von der URL im folgenden Format mit zwei Pflichtfeldern:

{
    "data": {
       "serviceName": "test-service",
       "logLevel": "DEBUG"
    }
}
Nach dem Login kopieren

Lassen Sie uns den Protokollebenendienst erstellen, der unserer Anwendung die Protokollebene bereitstellt.

Ich werde GoFr verwenden, um den Dienst zu erstellen. Weitere Informationen finden Sie in der Dokumentation.

Wir werden MySQL als Datenbank verwenden. Um MySQL hinzuzufügen, fügen Sie die folgenden Konfigurationen in der .env-Datei im Konfigurationsverzeichnis hinzu.

DB_HOST=localhost
DB_USER=root
DB_PASSWORD=password
DB_NAME=log-level
DB_PORT=2001
DB_DIALECT=mysql
Nach dem Login kopieren

Um den MySQL-Docker-Container auszuführen, führen Sie den folgenden Befehl aus

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

Fügen wir die Datei main.go mit Migrationen hinzu, um eine Tabelle zu erstellen, und wir verwenden die AddRESTHandler-Funktion, um die Route zu registrieren.

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()
}
Nach dem Login kopieren

Nachdem wir den Protokolldienst ausgeführt haben, sehen wir die folgenden Protokolle:

LOGS FOR LOG-LEVEL CHANGE SERVICE STARTUP

Wir haben alle REST-Routen registriert.

Um einen Dienst zu erstellen, senden Sie die folgende Anfrage:

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

Um die Protokollebene zu aktualisieren, senden Sie die folgende Anfrage:

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

Um die Protokollebene zu erhalten, senden Sie die folgende Anfrage:

curl --location 'localhost:8000/level/1'
Nach dem Login kopieren

Die gleiche URL wird in den Konfigurationen unserer Anwendung verwendet, deren Protokollebene remote geändert werden muss.

ABSCHLUSS

Durch die Verwendung der GoFr-Funktion zur Remote-Protokollierungsebenenänderung profitieren Sie von folgenden Vorteilen:

  • Mühelose Anpassungen:
    Ändern Sie die Protokollebene jederzeit, ohne die Anwendung neu starten zu müssen. Dies ist besonders hilfreich bei der Fehlerbehebung.

  • Verbesserte Sichtbarkeit:
    Wechseln Sie einfach zu einer detaillierteren Protokollebene (z. B. DEBUG), um tiefere Einblicke in bestimmte Probleme zu erhalten, und wechseln Sie dann für den regulären Betrieb wieder zu einer weniger detaillierten Ebene (z. B. INFO).

  • Verbesserte Leistung:
    Das Generieren einer großen Anzahl von Protokollen kann das Protokollierungssystem überlasten, was zu erhöhten E/A-Vorgängen und Ressourcenverbrauch führt. Durch den Wechsel zur Warn- oder Fehlerstufe wird die Anzahl der Protokolle verringert, die Leistung verbessert und CLOUD-KOSTEN REDUZIERT.

Unterstützen Sie GoFr, indem Sie einen ⭐Stern geben: https://github.com/gofr-dev/gofr

Darüber hinaus haben Sie Zugriff auf den kostenlosen öffentlichen Endpunkt, um die Spuren Ihrer Anwendung zu exportieren und anzuzeigen @tracer.gofr.dev. 
Um es zu aktivieren, fügen Sie die folgende Konfiguration in Ihre .env-Datei ein

TRACE_EXPORTER=gofr
Nach dem Login kopieren

Weitere Vorteile:
Wenn Sie einen Beitrag zu GOFR leisten, sei es in der Entwicklung oder beim Schreiben von Artikeln. Sie können kostenlose Swags (T-Shirts, Aufkleber) erhalten, indem Sie das Formular auf GitHub Readme (unten) ausfüllen.

Das obige ist der detaillierte Inhalt vonÄnderung der Laufzeitprotokollebene mit Golang und GoFr. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!