


Ermitteln Sie mithilfe der Uber/Zap-Protokollierung in der gRPC-Middleware die tatsächliche Fehlerquelle in Go
PHP-Editor Zimo stellt in diesem Artikel vor, wie man die Uber/Zap-Protokollierung verwendet, um die tatsächliche Fehlerquelle in der Go-Sprache zu ermitteln, wenn gRPC-Middleware verwendet wird. Durch den Einsatz dieser Middleware können wir Fehler im Code besser verstehen und verfolgen und so Probleme schneller lokalisieren und lösen. In diesem Artikel erfahren Sie, wie Sie die Uber/Zap-Protokollierung konfigurieren und verwenden und wie Sie Fehlerinformationen in gRPC-Anfragen und -Antworten erfassen und protokollieren. Durch die Beherrschung dieser Techniken können wir unsere Debugging- und Fehlerbehandlungsfähigkeiten in gRPC-Anwendungen verbessern.
Frageninhalt
Ich verwende das Paket uber/zap für die Protokollierung. In meinem Design protokolliere ich alle Fehler in der Middleware des grpc-Pakets. Ich möchte protokollieren, von welcher Datei und Zeilennummer der Fehler stammt. Derzeit kann ich jedoch nur den Dateinamen und die Zeilennummer der aktuellen Middleware abrufen. Gibt es eine Möglichkeit, die tatsächliche Fehlerquelle herauszufinden?
func RegisterLogger(c config.Config) *zap.SugaredLogger { var logger *zap.Logger var err error if c.IsDebug { logger, err = zap.NewDevelopment() } else { logger, err = zap.NewProduction() } if err != nil { panic(err) } defer logger.Sync() return logger.Sugar() } func (s *ProviderServer) Pay(ctx context.Context, in *payment.PayRequest) (string, error) { resp, err := ctx.Value(in.Provider).(provider.IPayment).Exec(ctx, in) if err != nil { pc, file, line, ok := runtime.Caller(2) if ok { file = filepath.Base(file) nowTime := time.Now().Format("2006/01/02 15:04:05") funcName := runtime.FuncForPC(pc).Name() funcName = filepath.Ext(funcName) funcName = strings.TrimPrefix(funcName, ".") s.log.Info("Times:", i, " nowTime:", nowTime, " file:", file, " line:", line, " funcName:", funcName, " err:", err) } //Log the error information, including which file the error comes from. return resp.Result, err } else { s.log.Info("resp:", resp) } }
Workaround
In der aktuellen Implementierung versuchen Sie, die Datei- und Zeilennummer zu protokollieren, in der der Fehler aufgetreten ist. Die Informationen, die Sie erhalten, beziehen sich jedoch auf die aktuelle Middleware und nicht auf die tatsächliche Fehlerquelle.
Um die Datei- und Zeileninformationen der tatsächlichen Fehlerquelle zu erhalten, können Sie das Paket pkg/errors
verwenden. Dieses Paket bietet eine Möglichkeit, Fehler zu umschließen und Datei- und Zeileninformationen beizubehalten. Hier ist ein Beispiel dafür, wie Sie Ihren Code ändern, um dies zu erreichen:
import ( "github.com/pkg/errors" ) // ... func (s *ProviderServer) Pay(ctx context.Context, in *payment.PayRequest) (string, error) { resp, err := ctx.Value(in.Provider).(provider.IPayment).Exec(ctx, in) if err != nil { // Wrap the error with file and line information err = errors.Wrap(err, "pay error") // Log the wrapped error s.log.Errorw("Error occurred", "error", err) return resp.Result, err } else { s.log.Infow("Request processed successfully", "response", resp) return resp.Result, nil } }
Wenn Sie einen Fehler mit errors.wrap
函数包装错误,您可以将文件和行信息添加到错误中。然后,当使用 s.log.errorw
protokollieren, enthält die Protokollnachricht einen vollständigen Stack-Trace, einschließlich der Datei- und Zeileninformationen, aus denen der Fehler stammt.
Auf diese Weise können Sie die vom errors
-Paket bereitgestellten Informationen nutzen, um der tatsächlichen Fehlerquelle auf die Spur zu kommen.
Das obige ist der detaillierte Inhalt vonErmitteln Sie mithilfe der Uber/Zap-Protokollierung in der gRPC-Middleware die tatsächliche Fehlerquelle in Go. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

Video Face Swap
Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





In der Bibliothek, die für den Betrieb der Schwimmpunktnummer in der GO-Sprache verwendet wird, wird die Genauigkeit sichergestellt, wie die Genauigkeit ...

Das Problem der Warteschlange Threading In Go Crawler Colly untersucht das Problem der Verwendung der Colly Crawler Library in Go -Sprache. Entwickler stoßen häufig auf Probleme mit Threads und Anfordern von Warteschlangen. � ...

Der Unterschied zwischen Stringdruck in GO -Sprache: Der Unterschied in der Wirkung der Verwendung von Println und String () ist in Go ...

Das Problem der Verwendung von RETISTREAM zur Implementierung von Nachrichtenwarteschlangen in der GO -Sprache besteht darin, die Go -Sprache und Redis zu verwenden ...

Zwei Möglichkeiten, Strukturen in der GO -Sprache zu definieren: Der Unterschied zwischen VAR- und Typ -Schlüsselwörtern. Bei der Definition von Strukturen sieht die Sprache oft zwei verschiedene Schreibweisen: Erstens ...

Was soll ich tun, wenn die benutzerdefinierten Strukturbezeichnungen in Goland nicht angezeigt werden? Bei der Verwendung von Goland für GO -Sprachentwicklung begegnen viele Entwickler benutzerdefinierte Struktur -Tags ...

Welche Bibliotheken in GO werden von großen Unternehmen oder bekannten Open-Source-Projekten entwickelt? Bei der Programmierung in Go begegnen Entwickler häufig auf einige häufige Bedürfnisse, ...

Warum meldet der DSN bei Verwendung von SQL.Open keinen Fehler? In Go Language, Sql.open ...
