In diesem Artikel werde ich erläutern, wie Sie die Protokollebene Ihrer Anwendung ändern können, ohne Ihre Anwendung neu starten zu müssen.
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.
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)
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)
GoFr benötigt die Antwort von der URL im folgenden Format mit zwei Pflichtfeldern:
{ "data": { "serviceName": "test-service", "logLevel": "DEBUG" } }
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
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
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() }
Nachdem wir den Protokolldienst ausgeführt haben, sehen wir die folgenden Protokolle:
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" }'
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" }'
Um die Protokollebene zu erhalten, senden Sie die folgende Anfrage:
curl --location 'localhost:8000/level/1'
Die gleiche URL wird in den Konfigurationen unserer Anwendung verwendet, deren Protokollebene remote geändert werden muss.
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
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!